У меня есть несортированный файл словаря с именем "dict.txt".
Мне удалось поместить слова файла в массив, и qsort (), который я использую, также, кажется, работает очень хорошо (то есть массив отсортирован).
Проблема возникает, когда я вызываю bsearch (),
программа падает, и мой вопрос:
Почему это происходит?
Я использую gcc для компиляции и не использую какую-либо IDE, поэтому у меня нет отладчика и я не знаю, как его использовать (пока).
Мне известно, что представленный здесь код может содержать несколько проблем.
Это потому, что я довольно новичок в c, и мой опыт в основном Java (что, несмотря на сходства, кажется недостатком, потому что я так привык к OO, а c явно не OO).
Любой совет будет принят с благодарностью.
int strcmp_mod(const void *p1, const void *p2) {
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
int main(void) {
int size, i;
char **words;
char *pItem;
char *key = "fight";
char* buf = load_file("dict.txt"); if (buf == NULL) return 1;
size = count_words(buf);
words = (char**)malloc((size+1) * sizeof(char*));
for (i=0; i<size; i++) {
words[i] = (char*)malloc(80 * sizeof(char));
}
copy_words_to_lower(buf, words, size);
words[size] = '\0';
qsort(words, size, sizeof(char*), strcmp_mod);
for (i=0; i<size; i++) {
printf("%s\n", words[i]);
}
pItem = (char *) bsearch(key, words, size, sizeof(char*), strcmp_mod);
if (pItem!=NULL)
printf ("%s is in the array.\n", pItem);
else
printf ("%s is not in the array.\n", key);
return 0;
}