gpt4 book ai didi

c - 返回指向指向字符串的结构的指针

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

在这种情况下,这是创建字符串的正确方法吗?

Foo* create()
{
Foo *foo = malloc(sizeof(Foo));
foo->name = strdup("Foo");
return foo;
}

稍后我必须同时删除 foo 和 foo->自己命名。

最佳答案

对象分配不完全正确(您应该转换为 Foo* 而不是 mystruct)。 字符串分配是正确的,但可能不完全是您想要的。

strdup() 函数实际上为您调用了malloc(),您只有在稍后要修改字符串时才需要此构造(并且不要'增加它的长度!!!)。在处理 Foo 对象时,您不应该忘记对字符串调用 free()

如果 foo->name 用于只读目的,将 foo->name 声明为 const char * 并只写 foo->name = "Foo"; 来初始化它。

编辑:另请注意,strdup() 可能会返回 NULL,您应该检查一下!如果是这样,我将不只是对它使用 assert(),因为内存不足的错误是无法恢复的。不要试图处理此类错误。这对于分配 Foo 对象也很重要。

关于c - 返回指向指向字符串的结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007989/

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