1

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

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

稍后我将不得不自己删除 foo 和 foo->name。

4

2 回答 2

2

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

strdup()函数实际上需要malloc()您,并且仅当您想稍后修改字符串时才需要此构造(并且不要增加其长度!!!)。处理对象时不要忘记调用free()字符串。Foo

如果foo->name是用于只读目的,则声明foo->name为 aconst char *并仅写入foo->name = "Foo";以对其进行初始化。

编辑:还要注意strdup()可能会返回NULL,你应该检查一下!如果是的话,我会assert()选择它,因为内存不足的错误是非常不可恢复的。不要试图处理此类错误。这对于分配Foo对象也很重要。

于 2012-08-17T14:59:56.110 回答
0

这是正确的,但您不必强制转换malloc(而且您不应该)的返回指针。

于 2012-08-17T14:48:03.487 回答