将Char数组附加到Char指针

时间:2013-04-10 09:10:15

标签: c arrays pointers copy char

我现在已经有一段时间了,我似乎没弄明白。

我有这段代码:

    unsigned char *src;
    int length = (parameterArray[i].sizeInBits/8) + 1; // check how long array should be
    unsigned char tmp[length]; // declare array

    memcpy(tmp, (char*)&parameterArray[i].valueU8, length); // in this case copy char to array
    src = realloc(src, strlen(src) + strlen(tmp)); // reallocate space for total string
    strncat(src, tmp, strlen(tmp)); // merge 
每次代码在重新分配部分崩溃时

我几乎尝试了一切,但没有任何作用。请帮忙

3 个答案:

答案 0 :(得分:4)

src是一个单位化指针,它将保存一个随机存储器地址。 realloc()状态的先决条件。来自链接的参考页面:

  

重新分配给定的内存区域。 它必须先由malloc(),calloc()或realloc()分配,但尚未使用free()释放,否则结果未定义。

使用realloc()将结果存储到临时变量时,以避免在发生故障时发生内存泄漏。

此外,在strlen()上调用src也会导致未定义的行为。正如mani tmp首先指出的那样必须为空终止才能使strlen()strcpy()正常工作。必须将realloc()中计算的空间增加1,以便为终止空字符分配额外的char

示例代码修复:

unsigned char tmp[length + 1];
memcpy(tmp, parameterArray[i].valueU8, length);
tmp[length] = 0;

unsigned char* src = NULL;
unsigned char* src_tmp = realloc(src, (src ? strlen(src) : 0) + strlen(tmp) + 1);
if (src_tmp)
{
    if (!src) *src_tmp = 0; /* Ensure null character present before strcat(). */
    src = src_tmp;
    strcat(src, tmp);
}

答案 1 :(得分:2)

根据此行memcpy(tmp, (char*)&parameterArray[i].valueU8, length);的代码,您尝试复制必须使用Null终结符分配的valueU8。否则它将在此行src = realloc(src, strlen(src) + strlen(tmp));

中崩溃

答案 2 :(得分:0)

来自realloc的手册页

  

除非ptr为NULL,否则必须先通过对malloc(),calloc()或realloc()的调用返回。

并且你的src是一个未初始化的指针