在这种情况下,这是创建字符串的正确方法吗?
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/