【问题标题】:Assigning values from a static char array to a dynamically allocated char array将静态 char 数组中的值分配给动态分配的 char 数组
【发布时间】:2013-12-18 18:18:47
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c dynamic static memcpy strcpy


    【解决方案1】:

    您的代码存在一些问题:

    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
    

    【讨论】:

    • 非常感谢您与 cmets 一起解释它。这有很大帮助。另一个问题:如果我在函数中使用这种复制方法,然后使用它将复制的数据插入到列表中,有没有办法在插入后释放内存而不丢失插入的数据?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2015-05-06
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多