gpt4 book ai didi

c - 从将其内存分配给同一函数的函数返回字符串是否安全/正确?

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:42 30 4
gpt4 key购买 nike

我明白,如果我想从函数返回一个字符串文字或一个数组,我应该将其声明为静态的,这样当被调用的函数被返回时,内容就不会“消亡”。

但我的问题是,当我在函数内部使用 malloc 分配内存时会怎样?

在下面的函数中:

char * getLine() {

char *line = (char *) malloc(10 * sizeof(char));

printf("Enter a string: ");
fgets(line, 10, stdin);

return line;
}

即使在函数 getLine 返回后,从该函数返回的内存地址仍然安全吗?

最佳答案

I understand that if I want to return a string literal or an array from a function I should declare it as static

这不完全正确:虽然将其声明为 static 可以解决问题,但在动态内存中分配它也可以,即 malloc/calloc/realloc/strdup/等。所以答案是“是的,从函数返回 malloc-ed 内存是绝对安全的”。当然,接收动态内存的调用者必须在不再需要时处理释放-ing。

编辑:(回应评论)事实上,在某些情况下,使用 static 可能较差,因为缓冲区将保持共享。例如,如果您决定制作一个用户输入的字符串列表,您将被迫在调用者中制作副本。此外,使用 static 会使您的函数不可重入,这在并发环境中是有害的。

关于c - 从将其内存分配给同一函数的函数返回字符串是否安全/正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17639525/

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