gpt4 book ai didi

c - 需要将字符串数组复制到指针字符串数组中

转载 作者:太空狗 更新时间:2023-10-29 14:49:13 26 4
gpt4 key购买 nike

我正在编写一个程序,它接受一个字符串数组并对它进行排序,然后使用搜索函数来搜索目标。我设置的字符串数组适用于我的所有排序函数,但我需要数据位于指针字符串数组中,以便在我的搜索函数中使用 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.
}
}

最佳答案

在这个声明中

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 );

关于c - 需要将字符串数组复制到指针字符串数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58415067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com