Arrays 尝试按字母顺序对数组排序
我正在尝试按字母顺序对2d数组进行排序 首先,我创建一个数组,用随机用户输入填充它,当按下0时,输入停止,程序打印原始数组。到目前为止还不错,但现在我想用库中的qsort按字母顺序对这个数组进行排序。不幸的是,我从编译器中得到了一个分段错误内核 代码如下:Arrays 尝试按字母顺序对数组排序,arrays,2d,qsort,Arrays,2d,Qsort,我正在尝试按字母顺序对2d数组进行排序 首先,我创建一个数组,用随机用户输入填充它,当按下0时,输入停止,程序打印原始数组。到目前为止还不错,但现在我想用库中的qsort按字母顺序对这个数组进行排序。不幸的是,我从编译器中得到了一个分段错误内核 代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 20 int compare (const void * a,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
int compare (const void * a, const void * b ) {
return strcmp(a, b);
}
int main(void) {
printf("\n\nGeben Sie beliebig viele Vor- und Zunamen ein.\n");
int *ptr = malloc(sizeof(*ptr));
char name[MAX][MAX];
char key[] = "0";
int i = 0;
if (ptr != NULL) {
do {
i++;
printf("Put in a first Name: ");
scanf("%s", name[i]);
printf("%s\n", name[i]);
} while(strcmp(name[i], key) != 0); // compare if input = 0. -> if input zero then break
}
printf( "original input:\n" );
for( int j = 1; j < i; ++j )
printf( "%d: %s\n", i, name[j] );
// Here is the probleme, I get "Segmentation fault (core dumped)" from Compiler
qsort(name, i, 10*sizeof(name[0]), compare);
for (int k =0; k<i; k++) {
printf("%s\n",name[k]);
}
free(ptr);
return EXIT_SUCCESS;
}
好的,当你遇到分段错误时,首先要看的是操作点/数组——在类似C语言的语言中,它们实际上是一样的 看看strcmp的用法,记住它应该是一个C字符串。C字符串是以null结尾的数组。在第一次通过程序时,数组名将在哪里终止 答:没有人知道。但是,如果没有出现这种情况,strcmp将继续查找,直到它到达数据段的末尾,这将导致分段错误,等等 这里还有几个其他问题: 你在用malloc'd指针做什么?int*ptr将为指针本身提供空间 当getch将完成这项工作时,你为什么要为scanf烦恼 看这里:
int i = 0;
if (ptr != NULL) {
do {
i++;
printf("Put in a first Name: ");
scanf("%s", name[i]);
...
}
...
请注意,第一个名称将进入名称[1],而名称[0]将保持未初始化状态。然后qsort将传递指向要比较的垃圾的指针,该指针将传递给strcmp。好的,您的意思是我必须寻找另一种方法来摆脱do while循环,而不是strcmpname[i],key!=是的。后退,想想你想要什么。name[i]不是字符串-它只是一个单元格。您可以将其与“0”进行比较(即字符“0”)。但更好的是,弄清楚你真正想做什么——在你写C代码之前,用英语说出你想做什么,或者用德语,moeglich。