【问题标题】:Need to copy string array into a pointer string array需要将字符串数组复制到指针字符串数组中
【发布时间】:2019-10-16 13:55:05
【问题描述】:

我正在编写一个程序,它接收一个字符串数组并对其进行排序,然后使用搜索函数来搜索目标。我设置的字符串数组适用于我的所有排序函数,但我需要将数据放在指针字符串数组中,以便在我的搜索函数中使用 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 *arr[] = {...,但请注意,字符串现在将是谎言并且是只读的。您可以复制它们,但不能更改原件。
  • 您确定要为此使用一个固定大小的二维数组,而不仅仅是一个指向可变长度字符串的指针数组吗?
  • quote: "我需要将数据放在指针字符串数组中,以便在我的搜索函数中使用 strcmp" 嗯 - strcmp(arr[0], "some string") 有什么问题?还是strcmp(arr[0], target[0])?我不明白您为什么要将数组复制到“另一个数组”以使用strcmp。对我来说似乎是一个 XY 问题

标签: c arrays string pointers


【解决方案1】:

在此声明中

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

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多