初始化结构的问题

时间:2012-08-06 15:39:23

标签: c

这是我的代码:

typedef struct{
  char name[64];
} Cat;

Cat createCat(char name[64]) {
  Cat newCat;

  int i;

  for(i = 0; i < 64; i += 1) {
    newCat.name[i] = name[i];
  }

  return newCat;
}

Cat exampleCat = createCat("Bob");

它编译时出现以下错误:

  

初始化元素不是常量

我做错了什么?

3 个答案:

答案 0 :(得分:6)

Cat exampleCat = createCat("Bob");

你不能在这里进行方法调用。在其他地方初始化exampleCat

规范第6.7.8 / 4节对此进行了解释:

  

具有静态存储持续时间的对象的初始值设定项中的所有表达式都应为常量表达式或字符串文字。

答案 1 :(得分:2)

您真的不需要编写函数来初始化结构。您可以使用初始值设定项为每个成员提供值(此处只有一个)。

Cat exampleCat = {"Bob"};

另请注意,如果您使用过C ++,则可以选择使用动态初始化程序,代码也可以。

答案 2 :(得分:0)

尝试改为:

void createCat(Cat * kitty, char name[64]) {
  int i;

  for(i = 0; i < 64; i += 1) {
    kitty->name[i] = name[i];
  }
}

Cat exampleCat;
createCat(&exampleCat, "Bob");