3

这是我的代码:

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");

它编译时出现以下错误:

初始化元素不是常量

我究竟做错了什么?

4

3 回答 3

6
Cat exampleCat = createCat("Bob");

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

这在规范第 6.7.8/4 节中进行了解释:

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

于 2012-08-06T15:41:35.910 回答
2

您真的不需要编写函数来初始化结构。您可以只使用一个初始化器,在其中为每个成员赋值(这里只有一个)。

Cat exampleCat = {"Bob"};

另请注意,如果您改为使用 C++,则可以选择使用动态初始化程序,并且代码就可以了。

于 2012-08-06T16:30:03.523 回答
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");
于 2012-08-06T15:44:40.207 回答