在这种情况下,这是创建字符串的正确方法吗?
Foo* create()
{
Foo *foo = malloc(sizeof(Foo));
foo->name = strdup("Foo");
return foo;
}
我稍后将不得不删除foo和foo->自己命名。
答案 0 :(得分:2)
对象分配不完全正确(你应该转换为字符串分配是正确的,但可能不完全是你的想。Foo*
而不是mystruct
)。
strdup()
函数实际上为您调用malloc()
,如果您想稍后修改字符串(并且不增加其长度!!!),您只需要这种结构。当您处置free()
对象时,不应忘记在字符串上调用Foo
。
如果foo->name
仅供参考,请将foo->name
声明为const char *
,然后只需编写foo->name = "Foo";
即可初始化。
编辑:
另请注意,strdup()
可能会返回NULL
,您应该检查它!如果它不仅仅是assert()
,那么因为内存不足错误是不可恢复的。不要试图处理这种错误。这也是分配Foo
对象的重要因素。
答案 1 :(得分:0)
这是正确的,但你不必强制转换malloc
的返回指针(你不应该)。