gpt4 book ai didi

c - qsort 函数导致问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:54:13 24 4
gpt4 key购买 nike

这是我的代码

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

#define STRING_LENGTH 20
#define MAX 30

int read_string(char string[], int n);
int compare(const void*a, const void*b);

int main(){
int i;

char* word_list[30];
char word[STRING_LENGTH + 1];

for (i = 0; ; i++){
printf("\nEnter a word.\n");
read_string(word, STRING_LENGTH);

if (word[0] == '\0')
break;
word_list[i] = (char *)malloc(STRING_LENGTH + 1);
//free(word_list);
strcpy(word_list[i], word);
}

int length = sizeof(word_list)/sizeof(char*);

int j;

qsort(word,length, sizeof(char*), compare);
for (j = 0; word_list[j] != '\0'; j++)
printf("%s\n", word_list[j]);

return 0;
}

int compare(const void*element1, const void *element2){
const char *string1 = *(const char**)element1;
const char *string2 = *(const char**)element2;

return strcmp(string1,string2);
}

int read_string(char string[], int n){
int ch, i = 0;

while ((ch = getchar()) != '\n')
if (i < n)
string[i++] = ch;
string[i] = '\0';

return i;
}

我的程序应该通过 read_string 函数读取字符串,然后使用 strcpy 将它们作为指针数组的元素放置,然后名称按字母顺序排序。它会编译并读取我的输入,但一旦到达 qsort() 就会崩溃。我知道 qsort() 导致了问题,但我不知道为什么。任何帮助将不胜感激。

最佳答案

评论中指出了很多问题。主要原因是您调用 qsort 时使用了错误的指针和不正确的成员数 (30),而不是读取的字符串数。更正如下:

qsort (word_list, i, sizeof (char *), compare);

虽然您可以在 qsort 完成后使用哨兵停止打印,但为什么呢?您已经知道在 i 中读取了多少个字符串。很简单:

for (j = 0; j < i; j++)
printf ("%s\n", word_list[j]);

顺便说一句,能够在 read_string 中的任意数量的字符串之后停止输入会很有用。允许键盘生成的 EOF 通过 ctrl+d(Windows 上的 ctrl+z)发出输入结束信号将起作用。例如:

while ((ch = getchar ()) != '\n' && ch != EOF)

关于c - qsort 函数导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31308605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com