返回指向指向字符串的结构的指针

时间:2012-08-17 14:46:39

标签: c

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

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

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

2 个答案:

答案 0 :(得分:2)

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

strdup()函数实际上为您调用malloc(),如果您想稍后修改字符串(并且不增加其长度!!!),您只需要这种结构。当您处置free()对象时,不应忘记在字符串上调用Foo

如果foo->name仅供参考,请将foo->name声明为const char *,然后只需编写foo->name = "Foo";即可初始化。

编辑: 另请注意,strdup()可能会返回NULL,您应该检查它!如果它不仅仅是assert(),那么因为内存不足错误是不可恢复的。不要试图处理这种错误。这也是分配Foo对象的重要因素。

答案 1 :(得分:0)

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