【问题标题】:char initialization in struct结构中的字符初始化
【发布时间】:2012-06-12 16:54:06
【问题描述】:

我有下面的代码。我在构建它时收到“警告:初始化器 [-Wmissing-braces] 周围缺少大括号”警告。

struct routing {
    int hop_distance;
    char timeinfo[13];
    char sender_ID[16];
    char gateway[16];
};

struct routing user_list[40]  =  { [0]={0,0,0,0}};

我想我是因为 char 初始化而收到警告,我应该如何初始化它?

struct routing user_list[40]  =  { [0]={0,{0},{0},{0}}};

struct routing user_list[40]  =  { [0]={0,'\0','\0','\0'}};

还是其他方式?

【问题讨论】:

  • memset(&user_list, 0, 40 * sizeof(routing));
  • 请注意,使用struct routing user_list[40] = {{0}}; 可以缩短相同的时间。任何没有显式初始化器的字段和数组元素都将被初始化为静态对象,并将其初始化为适当的 0 值。

标签: c struct char


【解决方案1】:

您正在初始化数组的元素 0。因此:

 struct routing user_list[40] = { [0]={...} };

到目前为止,您做对了。在此元素中,您正在初始化四个成员:

 struct routing user_list[40] = { [0]={..., ..., ..., ...} };

也不错。

元素 1 是一个int,所以你可以用一个数字来初始化它,比如 0。

元素 2、3 和 4 是 char 的数组,因此您可以像初始化 char 的数组一样初始化它们。 {0}{'\0'}"" 它们都有效:

 struct routing user_list[40] = { [0]={0, {0}, {'\0'}, ""} };

请注意,上面是一个示例,显示您可以使用所有三种方法。实际上,您采用一种方法并在所有三种方法中都使用它。

您收到警告的原因是因为您尝试使用0 而不是{0} 来初始化数组。

【讨论】:

    【解决方案2】:

    你必须用花括号括住数组:

    struct routing user_list[40] = {
        [0] = { 0, { 0 }, { 0 }, { 0 } }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多