尝试按字母顺序对数组进行排序

Trying to sort an array alphabetically

我正在尝试按字母顺序对二维数组进行排序。

首先,我创建了一个数组并用随机用户输入填充它,当按下“0”时,输入停止,程序打印原始数组。到目前为止一切顺利,但现在我想用库中的 qsort 按字母顺序对这个数组进行排序。不幸的是,我从编译器那里得到了 "Segmentation fault (core dumped)"。

代码如下:

#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;
}

好的,任何时候遇到分段错误,首先要看的是操作 points/arrays——在类 C 语言中,它们实际上是一回事。

查看您对 strcmp 的使用,并记住它需要一个 C 字符串。 C 字符串是一个以 null 结尾的数组。在第一次通过程序时,哪里会有一个 null 终止你的数组 name

答:没人知道。但是,如果没有发生,strcmp 将继续查找,直到它到达数据段的末尾,这会导致等待它 "segmentation fault".

还有几个问题:

  1. 你用 malloc 指针做什么? int * ptr 会给你 space 一个指针。

  2. getch 可以完成工作时,您为什么还要为 scanf 烦恼?

看这里:

int i = 0;

if (ptr != NULL) {
  do {                        
    i++;
    printf("Put in a first Name: ");
    scanf("%s", name[i]);
    ...
  }
  ...

请注意,名字将进入 name[1],而 name[0] 将保持未初始化的垃圾。然后 qsort 会将垃圾(指向)传递给 comparecompare 会将其传递给 strcmp