为什么运行不出来(指针数组降序问题)

题目是 在主函数中输入5个字符串,定义指针数组指向这5个字符串,编写函数void fun(char*[】,int),
对字符串降序排序,在主函数中输出排序后的字符串。
一下是我的代码

img

fun函数里的temp改为数组应该就可以了,因为如果是字符指针,而没有指向某块内存空间,是无法正确存储字符串的。

修改如下:



#include <stdio.h>
#include <string.h> 
#include <stdlib.h>

void fun(char *p[],int n){
    
    int i,j,k;
    
    // 将遍历temp由字符指针改为字符数组,
    // 以便可以存储 字符串 
    char temp[100];
    
    for(i=0;i<4;i++){
        
        k=i;
        for(j=i+1;j<5;j++){
            if(strcmp(p[j],p[k])>0){
                k=j;
            }
        }
        if(k!=i){
            strcpy(temp,p[k]);
            strcpy(p[k],p[i]);
            strcpy(p[i],temp);
        }
    }
}

int main(void){
    
    int i;
    char * p[5];
    printf("请输入5个字符串:\n");
    for(i=0;i<5;i++){
        p[i]=(char*)malloc(sizeof(char)*100);
        scanf("%s",p[i]);
    }
    
//    
//    for(i=0;i<5;i++){
//        printf("%s\n",p[i]);
//    }
    
    
    printf("\n");
    fun(p,5);
    printf("降序排序后:");
    for(i=0;i<5;i++){
        printf("%s    ",p[i]);
    }
    
    
    return 0;
}

img

没有给temp分配空间,也没赋初值。

这么改,供参考:

img