У меня есть файл несортированного словаря с именем "dict.txt". Мне удалось помещать слова файла в массив, и используемое мной qsort() также работает очень хорошо (т. Е. Массив отсортирован).Почему вызов bsearch() приводит к сбою представленной программы?
Проблема возникает, когда я называю 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;
}
Попробуйте поместить printf() в вашу функцию strcmp_mod ..., которая позволит вам точно увидеть, что сравнивается с чем (и является ли это даже допустимой строкой), чтобы вы могли точно видеть, что происходит, даже без отладчик. – Eric