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

标签 c

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

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

稍后我必须同时删除 foo 和 foo->自己命名。

最佳答案

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

strdup() 函数实际上为您调用了malloc(),您只有在稍后要修改字符串时才需要此构造(并且不要'增加它的长度!!!)。在处理 Foo 对象时,您不应该忘记对字符串调用 free()

如果 foo->name 用于只读目的,将 foo->name 声明为 const char * 并只写 foo->name = "Foo"; 来初始化它。

编辑: 另请注意,strdup() 可能会返回 NULL,您应该检查一下!如果是这样,我将不只是对它使用 assert(),因为内存不足的错误是无法恢复的。不要试图处理此类错误。这对于分配 Foo 对象也很重要。

关于c - 返回指向指向字符串的结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007989/

相关文章:

c - 如何实现终端滚动?

c - 如何根据 C 函数中函数的输入退出 while 循环?

c - 为什么这段代码中的 var.name[i] 正在打印 stationto 值

c - gdb - 你能找到持有内部 glibc 锁的线程吗?

c - 为什么要在 C 的字符串输入中使用 int 类型的变量?

c - 一次打破许多 for 循环的巧妙方法是什么?

c - 为什么我的 Infix to postfix 程序给出了错误的输出(C,Stacks)

c - 如何让 C 编译器假定十进制文字(例如 1.23)是 float 而不是 double ?

无法使用 -std=c99 找到 math.h 常量?

c - 常量 C 表达式是在编译时还是在运行时求值?