将值从静态char数组分配给动态分配的char数组

时间:2013-12-02 21:44:48

标签: c dynamic static memcpy strcpy

今天我被告知我可以轻松获取静态数组的内容并将数据复制到动态分配的数据中。我搜索了很长一段时间,仍然没有找到一个很好的解释,如何以及为什么这是可能的。 例如,如果我有如下代码,

int i = 0;
char array[64];
for (; i < 64; ++i)
{
  array[i] = "a";
}

char* dynamicArray = (char*) malloc (sizeof (char*) * strlen (array));

我被告知我可以获取数组的内容,在这种情况下是一个数组的数组,并将该数据复制到我的动态数组中。我仍然对如何做到这一点感到困惑,因为像memcpy和strcpy这样的函数没有使用静态数组。这种复制情况可能吗? 谢谢你的帮助,我希望我的解释没问题。

1 个答案:

答案 0 :(得分:3)

您的代码存在一些问题:

array[i] = "a";

尝试将字符串(字符数组)分配给单个char。您应该使用'a'来定义单个字符。

char* dynamicArray = (char*) malloc (sizeof (char*) * strlen (array));

分配内存但不分配内存。 strlen(array)也不安全; strlen计算字符数,直到nul终结符,但array没有。

您的代码应该类似于

int i = 0;
char array[64];
for (; i < 63; ++i) {
  array[i] = 'a';
}
array[63] = '\0';
char* dynamicArray = malloc (strlen(array)+1); // +1 for nul terminator
strcpy(dynamicArray, array); // copy contents of array into dynamicArray
// use array
free(dynamicArray); // must have exactly one call to free for each call to malloc