复制Char *数组会破坏数据

时间:2012-11-04 06:17:40

标签: c pointers copy char corruption

我对C相对较新,我遇到了一些代码问题。这是非常简单的代码:代码的目标是将给定的char指针数组或char ** source复制到给定的char **目标。

我遇到的问题是有时(通常当我在源代码中有超过2个字符串时)第一个元素完全损坏,当我最终打印出目标时,它会打印出类似“; @?”的内容。对于第一个元素,其他元素打印正常。

执行复制的代码是:

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的代码。

2 个答案:

答案 0 :(得分:1)

您需要将destination的分配更改为:

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

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

同时验证您是否正确地将char **作为字符串的源数组传递。

答案 1 :(得分: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结尾的字符串。