Arrays 尝试按字母顺序对数组排序

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,

我正在尝试按字母顺序对2d数组进行排序

首先,我创建一个数组,用随机用户输入填充它,当按下0时,输入停止,程序打印原始数组。到目前为止还不错,但现在我想用库中的qsort按字母顺序对这个数组进行排序。不幸的是,我从编译器中得到了一个分段错误内核

代码如下:

#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。