gpt4 book ai didi

arrays - 我哪里越界了?

转载 作者:行者123 更新时间:2023-12-02 18:18:38 24 4
gpt4 key购买 nike

我的代码接受一系列单词作为命令行参数,并应使用 qsort 对它们进行排序。现在我打印出原始参数,但是当它打印排序后的参数时,我收到段错误。 C 语言新手,感谢所有建议。

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


int stringCmp(const void *str1, const void *str2); //Function prototype.

int main (int argc, char *argv[])
{
int i;
char **arr = malloc(argc * sizeof(char *));
printf("Original Args:\n");
for (i = 0; i < argc-1; i++){
arr[i] = argv[i+1];
printf("%s\n",arr[i]);
}

qsort(arr, argc, sizeof *arr, stringCmp);

printf("\nSorted Args:\n");
for (i = 0; i < argc; i++){
printf("%s\n", arr[i]);
}
free (arr);
return 0;
}

int stringCmp(const void *str1, const void *str2)
{
strcmp(str1, str2);
}

最佳答案

您的比较函数没有返回任何内容。此外,此函数获取数组元素的地址,因此您实际得到的是 char * const *,而不是 void *

你想要:

int stringCmp(const void *str1, const void *str2)
{
const char * const *s1 = str1;
const char * const *s2 = str2;
return strcmp(*s1, *s2);
}

您也没有向 qsort 传递正确数量的元素。它应该是 argc-1,而不是 argc。打印列表也是如此:

  qsort(arr, argc-1, sizeof *arr, stringCmp);

printf("\nSorted Args:\n");
for (i = 0; i < argc-1; i++){
printf("%s\n", arr[i]);
}

关于arrays - 我哪里越界了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71197240/

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