gpt4 book ai didi

c - 将 Char 数组附加到 Char 指针

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:58 25 4
gpt4 key购买 nike

我已经在这个流中有一段时间了,但我似乎没有弄明白。

我有这个代码:

    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 是一个初始化指针,将保存一个随机内存地址。 realloc() 的先决条件状态。来自链接的引用页面:

Reallocates the given area of memory. It must be previously allocated by malloc(), calloc() or realloc() and not yet freed with free(), otherwise, the results are undefined.

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

此外,在 src 上调用 strlen() 也会导致未定义的行为。正如mani首先指出的那样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);
}

关于c - 将 Char 数组附加到 Char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15921577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com