这是在这种情况下创建字符串的正确方法吗?
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(而且您不应该)的返回指针。