0

いくつかの文字列を入力し、アルファベット順に並べ替えます。最大で 100 個の文字列で、各文字列の長さは 50 未満ですが、セグメンテーション エラーが発生します。

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

int comp(const void * a, const void * b)
{
    return strcmp (*(const char **) a, *(const char **) b);
}

int main()
{
    char sequences[100][50];
    int nr_of_strings;
    scanf("%d", &nr_of_strings);
    int i;
    for(i = 0; i < nr_of_strings; ++i)
        scanf("%s", sequences[i]);
    qsort(sequences, nr_of_strings, sizeof(char *), comp);
    for(i = 0; i < nr_of_strings; ++i)
        printf("%s\n", sequences[i]);
}
4

2 に答える 2

3

変化する

return strcmp (*(const char **) a, *(const char **) b);
...
qsort(sequences, nr_of_strings, sizeof(char *), comp);

return strcmp ((const char *) a, (const char *) b);
...
qsort(sequences, nr_of_strings, sizeof(char [50]), comp);
于 2013-05-23T09:42:16.283 に答える
1

このように 2 次元配列を宣言してみてください。それは私のために働いた。

char** sequences;
int i;
sequences = (char**)malloc(100 * sizeof(char*));

for (i = 0; i < 100; i++)
{
    sequences[i] = (char*)malloc(50 * sizeof(char));
}
于 2013-05-23T09:40:42.143 に答える