这是在这种情况下创建字符串的正确方法吗?
Foo* create()
{
Foo *foo = malloc(sizeof(Foo));
foo->name = strdup("Foo");
return foo;
}
稍后我将不得不自己删除 foo 和 foo->name。
这是在这种情况下创建字符串的正确方法吗?
Foo* create()
{
Foo *foo = malloc(sizeof(Foo));
foo->name = strdup("Foo");
return foo;
}
稍后我将不得不自己删除 foo 和 foo->name。
对象分配并不完全正确(您应该转换为字符串分配是正确的,但可能不是您想要的。Foo*
而不是转换为mystruct
)。
该strdup()
函数实际上需要malloc()
您,并且仅当您想稍后修改字符串时才需要此构造(并且不要增加其长度!!!)。处理对象时不要忘记调用free()
字符串。Foo
如果foo->name
是用于只读目的,则声明foo->name
为 aconst char *
并仅写入foo->name = "Foo";
以对其进行初始化。
编辑:还要注意strdup()
可能会返回NULL
,你应该检查一下!如果是的话,我会assert()
选择它,因为内存不足的错误是非常不可恢复的。不要试图处理此类错误。这对于分配Foo
对象也很重要。
这是正确的,但您不必强制转换malloc
(而且您不应该)的返回指针。