Поиск динамически размещенного двумерного массива в C
Я пишу словарь на C, загружая каждое из слов словаря в динамически распределенный массив. Для поиска в массиве я пытаюсь использовать stdlib bsearch
функционировать, но не может заставить его работать.
Я исследовал функцию и наткнулся на C++ справочную функцию C Reference bsearch ().
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char str_array[][20] = {"gh","ef","cd","ab"};
int main ()
{
char * ptr_item;
char searchkey[20];
printf ("Enter a searchkey: ");
scanf ("%s", &searchkey);
/* sort the elements of the array */
qsort(str_array,4,20,(int(*)(const void*,const void*)) strcmp);
/* search for the searchkey */
ptr_item = (char*)
bsearch (searchkey,str_array,4,20,(int(*)
(const void*,const void*)) strcmp);
if (ptr_item!=NULL)
printf ("%s found in the array.\n",ptr_item);
else
printf ("%s not found in the array.\n",searchkey);
return 0;
}
Когда я дословно запустил их код и искал "ab", программа распечатала ab found in the array.
как и ожидалось. Тем не менее, когда я изменил программу, чтобы использовать массив, как мой, ab
не был найден.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char **str_array; //
int main ()
{
char * ptr_item;
char searchkey[20];
printf ("Enter a searchkey: ");
scanf ("%s", searchkey);
str_array = malloc(4 * sizeof(char *)); //
for (int i = 0; i < 4; i++) //
{
str_array[i] = malloc(sizeof(3 * sizeof(char))); //
}
str_array[0] = "gh\0"; //
str_array[1] = "ef\0"; //
str_array[2] = "cd\0"; //
str_array[3] = "ab\0"; //
/* sort the elements of the array */
qsort(str_array,4,20,(int(*)(const void*,const void*)) strcmp);
/* search for the searchkey */
ptr_item = (char*)
bsearch (searchkey,str_array,4,20,(int(*)
(const void*,const void*)) strcmp);
if (ptr_item!=NULL)
printf ("%s found in the array.\n",ptr_item);
else
printf ("%s not found in the array.\n",searchkey);
for (int i = 0; i < 4; i++) //
{
free(str_array[i]); //
}
free(str_array) //
return 0;
}
В чем ошибка во второй программе?