Необходимо скопировать массив строк в массив строк указателей - PullRequest
0 голосов
/ 16 октября 2019

Я пишу программу, которая принимает массив строк и сортирует его, а затем использует функции поиска для поиска цели. Массив строк, который я настроил, работает для всех моих функций сортировки, но мне нужно, чтобы данные были в массиве строк указателей, чтобы использовать strcmp в моих функциях поиска. Я приложил самую последнюю попытку в моей основной функции. Остальная часть основной функции включает в себя функцию сортировки и поиска, но то, что я публикую, содержит только инициализацию массивов и их распечатку. В реальной программе оно будет копировать содержимое из отсортированного массива после того, какую функцию сортировки пользователь выберет. Я просто хочу узнать, как бы я скопировал содержимое.

int main(void) {
    char arr[][MAX_LEN] = {"AAAAA", "a", "AAA", "aaaa", "AAa", "AAAAa", "AAa", "A", "aa", "Aaa"}; // initializes string array 
    char *target[] = {"A"};  //initializes target
    int n = sizeof(arr)/sizeof(arr[0]);  // initializes n 
    char *arry = (char* )malloc(n); // initizlizes *arry
    int i; 

    printf("Given string array is:");
    for (i = 0; i < n; i++)
        printf(" %s ", arr[i]); // prints out arr

    for (i = 0; i < n; i++) { // this was my first attempt to copy arr into *arr. 
        strcpy(arry[i], arr[i]);

        printf(" %s ", arry[i]); // used for testing to see if copying worked.
    }
}

1 Ответ

1 голос
/ 16 октября 2019

В этом объявлении

char *arry = (char* )malloc(n);

выделен только буфер для n символов.

То, что вы хотите сделать, это

char ( *arry )[MAX_LEN] = (char* )malloc( sizeof( char[n][MAX_LEN] ) );

Другой подход заключается в следующем.

char **arry = malloc( n * sizeof( char * ) );

for ( size_t i = 0; i < n; i++ )
{
    arry[i] = malloc( sizeof( char[MAX_LEN] ) ); 
}

В любом случае вам потребуется освободить всю выделенную память.

В первом случае вы можете написать

free( arry );

Во втором случае вы должны написать

for ( size_t i = 0; i < n; i++ )
{
    free( arry[i] );
}

free( arry );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...