.cpp.py.c 2021-07-11 12:30 采纳率: 88.9%
浏览 24
已结题

C语言的一个问题,我这程序为啥不对

img
先输入一个数表示要输入的字符串的个数,然后让换行输入的多个字符串存到数组中,当字符串的个数达到后按照首字母顺序换行输出

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-07-11 12:38
    关注

    char* str[N]没有申请空间,在scanf()前需要str[a] = (char*)malloc(N);
    scanf("%s",str[a])
    具体修改如下:

    img
    你自己根据上面该一下或者参考我写的。
    代码修改如下:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define N 10000
    
    int main()
    {
        int num;
        int i,j;
        char* str[N] = {0};
        char tmp[N];
        int a = 0;
        printf("Please enter a positive integer not less than 5.\n");
        scanf("%d",&num);
        getchar(); //吸收回车符
    
        //输入num个字符串
        while(a < num)
        {
            str[a] = (char*)malloc(N);
            memset(str[a],0,N);
            scanf("%s",str[a]);
            a++;
        }
    
        //比较字符串
        for (i=0;i<num-1;i++)
        {
            for (j=0;j<num-1-i;j++)
            {
                if(strcmp(str[j],str[j+1]) > 0)
                {
                    memset(tmp,0,N);
                    strcpy(tmp,str[j]);
                    memset(str[j],0,N);
                    strcpy(str[j],str[j+1]);
                    memset(str[j+1],0,N);
                    strcpy(str[j+1],tmp);
                }
            }
        }
        
        //打印
        for (i=0;i<num;i++)
            printf("%s",str[i]);
        
    
        //释放空间
        for (i=0;i<num;i++)
            free(str[i]);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月22日
  • 已采纳回答 7月11日
  • 创建了问题 7月11日