Поиск динамически размещенного двумерного массива в 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;
}

В чем ошибка во второй программе?

0 ответов

Другие вопросы по тегам