想用qsort给字符串按字典序排序 不知道为什么跑不起来

求帮忙修改 最多有一万个单词 都是小写 一个单词最多25个字母
#include
#include
#include
#define L 10000
#define K 1000

int cmp(const void *a, const void *b){
return strcmp((char *)a, (char *)b);
}

int main()
{
int k;
char s[L][K];
while(scanf("%s",s[k])!=EOF)
{
k++;
}
for(int i=0;i

qsort(s, k-1, sizeof(char*), cmp);
for(int i=0;i printf("%s\n",s[i]);
return 0;
}

代码里修改了5个地方,修改的地方都在代码里标注了,运行结果如下(图中的三个^Z是因为vs2022结束循环需要输入3次CTRL+Z,不影响最终结果):

img

代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define L 10000
#define K 26  //修改1  单词长度不超过25,所以用26个就足够了

int cmp(const void* a, const void* b) {
    return strcmp((char*)a, (char*)b);
}

int main()
{
    int k = 0; //修改2:初始化
    char s[L][K];
    while (scanf("%s", s[k]) != EOF)
    {
        if(strlen(s[k])> 0) //修改3:这里判断一下,避免读入空行
            k++;
    }
    //for (int i = 0; i < k - 1; i++) //修改4 删除for循环
        qsort(s, k , K, cmp); //修改5 第二个参数是k,第三个参数是K
    for (int i = 0; i < k; i++)
        printf("%s\n", s[i]);
    return 0;
}

char s[L][K];这个申请空间太大了吧,是不是要放到main函数外面成为全局变量呢
另外 int k=0;才行,k要初始化啊
修改如下:

#define L 10000
#define K 1000
char s[L][K];
int cmp(const void *a, const void *b){
    return strcmp((char *)a, (char *)b);
}

int main()
{
    int k=0;
    while(scanf("%s",s[k])!=EOF)
        k++;
    qsort(s, k, sizeof(s[0]), cmp);
    for(int i=0;i<k;i++)
        printf("%s\n",s[i]);
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632