gpt4 book ai didi

字符串联和内存重新分配

转载 作者:行者123 更新时间:2023-11-30 15:42:10 26 4
gpt4 key购买 nike

我正在尝试将单个数字连接到字符串:

include <stdio.h>
include <stdlib.h>
include <string.h>

int main() {

char *test="";
int i;

for (i = 0; i < 10; i++)
char *ic;
ic = malloc(2);
sprintf(ic, "%d", i);

// printf("%d\n", strlen(test));

if (strlen(test) == 0)
test = malloc(strlen(ic));
strcpy(test, ic);
} else {
realloc(test, strlen(test) + strlen(ic));
strcat(test, ic);
}

}
printf("%s\n", test);
// printf("%c\n", test);
free(test);
test = NULL;
return 0;
}

我的目标是最终 printf ("%s", test) 的结果为 0123456789

最佳答案

请记住,字符串以空字符结尾。为字符串分配内存时,必须为空值添加一个额外的字节。因此,您需要为每个 malloc()realloc() 调用添加 1。例如:

test = malloc(strlen(ic) + 1);

还要记住,realloc() 可以将变量“移动”到内存中的新位置。它可能需要这样做才能找到足够的连续未分配空间。如果它无法分配您请求的内存,它也可能返回 NULL,因此您应该这样调用它:

char *new_mem = realloc(test, strlen(test) + strlen(ic) + 1);
if (new_mem == NULL) {
// Not enough memory; exit with an error message.
} else {
test = new_mem;
}

关于字符串联和内存重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20293543/

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