1

一般来说,我对 C 语言比较陌生,而且我对某些代码有疑问。这是非常简单的代码:代码的目标是将给定的 char 指针数组或 char **source 复制到给定的 char **destination。

我遇到的问题是有时(通常当我在源中有两个以上的字符串时)第一个元素完全损坏,当我最终打印出目标时,它会打印出类似“;@?” 对于第一个元素,其他元素打印良好。

执行复制的代码是:

void CopyArrayOfStrings(char **source, int numStrings)
{
   char **destination = malloc(numStrings);

    for (int i = 0; i < numStrings; i++)
    {
        destination[i] = malloc(strlen(source[i] + 1);
        strcpy(destination[i], source[i]);
    }
}

请注意,我省略了检查 malloc 的结果是否为 NULL 的代码。

4

2 回答 2

1

您需要更改destinationas 的分配:

char **destination = malloc(numStrings*(sizeof(char*)));

分配char *指针数量来保存字符串。

char **还要验证您是否正确地作为源字符串数组传递。

于 2012-11-04T06:24:08.543 回答
0

你这样做是错的。

void CopyArrayOfStrings(char **source, int numStrings)
{
   char **destination = malloc(numStrings * sizeof(char *));

    for (int i = 0; i < numStrings; i++)
    {
        destination[i] = malloc(strlen(source[i]) + 1);
        strcpy(destination[i], source[i]);
        //alternatively you can use strdup() as suggested by @Christoffer
    }
}

这将为您提供numStrings阵列的存储空间。其中的每个元素,都将指向一个以 null 结尾的字符串。

于 2012-11-04T06:42:27.777 回答