gpt4 book ai didi

c - 我如何使用 strdup?

转载 作者:太空狗 更新时间:2023-10-29 16:39:26 25 4
gpt4 key购买 nike

我正在调用 strdup 并且必须在调用 strdup 之前为变量分配空间。

char *variable;
variable = (char*) malloc(sizeof(char*));
variable = strdup(word);

我这样做对吗?还是这里出了什么问题?

最佳答案

如果您使用的是 POSIX 标准 strdup() ,它计算所需的空间并分配它,并将源字符串复制到新分配的空间中。您不需要自己执行 malloc();事实上,如果你这样做,它会立即泄漏,因为你用指向 strdup() 分配的空间的指针覆盖了指向你分配的空间的唯一指针。

因此:

char *variable = strdup(word);
if (variable == 0) …process out of memory error; do not continue…
…use variable…
free(variable);

如果你确实需要做内存分配,那么你需要在variable中分配strlen(word)+1字节然后你可以复制word 进入新分配的空间。

char *variable = malloc(strlen(word)+1);
if (variable == 0) …process out of memory error; do not continue…
strcpy(variable, word);
…use variable…
free(variable);

或者计算一次长度并使用 memmove() 或者 memcpy():

size_t len = strlen(word) + 1;
char *variable = malloc(len);
if (variable == 0) …process out of memory error; do not continue…
memmove(variable, word, len);
…use variable…
free(variable);

不要忘记确保您知道每个 malloc()free() 在哪里。

关于c - 我如何使用 strdup?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14947821/

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