Я работаю над программой c для чтения из txt
и отсортируйте строки.
data.txt:
jk ef ab cd bc gh fg ij hi de
Вот мой код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
int cmp(const void *p1, const void *p2) {
return strcmp(*(const char **)p1, *(const char **)p2);
}
int main() {
FILE *f = fopen("data.txt", "r");
char s[255][255];
char tmp[255];
int n = 0;
while (!feof(f)) {
fscanf(f, "%s", tmp);
strcpy(s[n], tmp);
n++;
}
fclose(f);
qsort(s, n, sizeof(char *), cmp);
int i = 0;
for (; i < n; i++) {
printf("%s ", s[i]);
}
return EXIT_SUCCESS;
}
Я запустил код в Ubuntu, и он сломался из-за segfault. Поверьте, это segfault произошло в qsort
, и я не мог понять, почему.
Кто-нибудь может дать мне несколько предложений?
gcc -Wall -Wextra -g
с GCC....), затем используйте отладчик (например,gdb
). Внимательно прочитайте документацию qsort(3). Используйте динамическое выделение памяти C - person Basile Starynkevitch   schedule 07.09.2017qsort()
передает указатели функции сравнения на элементы массива. Элементов массиваchar[255]
. Таким образом,qsort()
функция сравнения передается в двухchar(*)[255]
. - person alk   schedule 07.09.2017strcmp(s[X], s[Y])
- person BLUEPIXY   schedule 07.09.2017(char*)
дает правильные результаты. - person Klas Lindbäck   schedule 07.09.2017