Я очень новичок в C и пытаюсь использовать qsort () с массивом указателей на символы. Это не сортировка массива по алфавиту, как я ожидал, и он удаляет первый элемент. Я попытался настроить все аргументы, включая функцию сравнения, но мне не удалось выяснить, в чем дело.
Введите слово: foo
Введите слово: bar
Введите слово: baz
Введите слово: quux
Ожидается:
bar
baz
foo
quux
Результат:
бар
баз
quux
Мой код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_WORDS 10
#define MAX_LENGTH 20
int read_line(char str[], int n);
int compare(const void *a, const void *b);
int main(void) {
char *words[MAX_WORDS], word[MAX_LENGTH + 1];
int i;
for(i = 0; i < MAX_WORDS; i++) {
printf("Enter word: ");
read_line(word, MAX_LENGTH);
words[i] = malloc(strlen(word) + 1);
if(!words[i]) {
printf("Allocation of memory failed...\n");
exit(EXIT_FAILURE);
}
strcpy(words[i], word);
if(!strlen(words[i]))
break;
}
qsort(words[0], i, sizeof(char *), compare);
for(int j = 0; j <= i; j++) {
printf("%s\n", words[j]);
}
return 0;
}
int read_line(char str[], int n) {
int ch, i;
while((ch = getchar()) != '\n') {
if(i < n)
str[i++] = ch;
}
str[i] = '\0';
return i;
}
int compare(const void *a, const void *b) {
return strcmp((char *) a, (char *) b);
}