C 将字符数组追加到字符指针

C 将字符数组追加到字符指针,c,arrays,pointers,copy,char,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, l

我在这方面已经有一段时间了,我似乎还没有弄明白

我有以下代码:

    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 
每次代码在重新分配部分崩溃时


我几乎什么都试过了,什么都没用。请帮助

src
是一个统一的指针,将保存一个随机内存地址。国家的先决条件。从链接的参考页:

重新分配给定的内存区域它必须是以前由malloc()、calloc()或realloc()分配的,而不是由free()释放的,否则结果是未定义的。

使用
realloc()
时,将结果存储到临时变量中,以避免出现故障时内存泄漏

此外,在
src
上调用
strlen()。正如
tmp
首先指出的,必须以null结尾,才能使
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);
}

src
是一个统一的指针,它将保存一个随机内存地址。国家的先决条件。从链接的参考页:

重新分配给定的内存区域它必须是以前由malloc()、calloc()或realloc()分配的,而不是由free()释放的,否则结果是未定义的。

使用
realloc()
时,将结果存储到临时变量中,以避免出现故障时内存泄漏

此外,在
src
上调用
strlen()。正如
tmp
首先指出的,必须以null结尾,才能使
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);
}

来自realloc的手册页

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


您的src是realloc手册页中未初始化的指针

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



您的src是一个未初始化的指针

根据您此行的代码
memcpy(tmp,(char*)和parameterary[i].valueU8,length)您正在尝试复制
值u8
,必须为其分配空终止符。否则它将在这行中崩溃
src=realloc(src,strlen(src)+strlen(tmp))

根据您此行的代码
memcpy(tmp,(char*)和parameterArray[i].valueU8,length)您正在尝试复制
值u8
,必须为其分配空终止符。否则它将在这行中崩溃
src=realloc(src,strlen(src)+strlen(tmp))

您没有说明问题所在,但请注意,您应该为空终止符添加1,使其大小与您的
realloc
相同。如果
parameterArray[i].valueU8
不能保证以null结尾,您也会遇到问题。什么不起作用?
parameterary
是如何定义的?很抱歉,在调用
realloc()
之前,我编辑了我的问题显示定义和
src
的任何用法。我只声明了它,unsigned char*src;您没有说明您的问题是什么,但请注意,您应该将空终止符的大小添加到您的
realloc
。如果
parameterArray[i].valueU8
不能保证以null结尾,您也会遇到问题。什么不起作用?
parameterary
是如何定义的?很抱歉,在调用
realloc()
之前,我编辑了我的问题显示定义和
src
的任何用法。我只声明了它,unsigned char*src+1,尽管
realloc()
的参数也可能为空,在这种情况下
realloc()
的行为类似于
malloc()
。好的,我知道你的意思。如果我想将字符用于除在屏幕上打印以外的其他目的,我是否仍有义务添加一个终止的空字符?@flexzican,几乎所有的c字符串函数都依赖于空终止。+1,尽管
realloc()
的参数也可能为空,在这种情况下,
realloc()
的行为类似于
malloc()
。好的,我知道你的意思。如果我想将字符用于除在屏幕上打印以外的其他目的,我是否仍有义务添加一个终止的空字符?@flexzican,几乎所有的c字符串函数都依赖于空终止。