【问题标题】:Error filling an int array in a typedef struct在 typedef 结构中填充 int 数组时出错
【发布时间】:2017-12-14 18:51:05
【问题描述】:

我尝试在 Huffman 结构中初始化代码数组,但是当我编译它时显示:

Error expected expression before '{' token.
我该如何解决?

typedef struct {  
    char letter;  
    float p;  
    int code[10];  
    }Huffman ;  
    Huffman line[4];   

    line[1].code[10]= {1,0,0,0};  
    line[2].code[10]= {0,0,1,0,1};  
    line[3].code[10]= {1,0,0,0,0};

【问题讨论】:

  • line[1].code[10] 是 UB。编译器肯定会为此抱怨(分配时类型不兼容)
  • code 只有 8 个元素。为什么要尝试分配给索引 10?
  • 赋值不能发生在函数之外

标签: c arrays struct int typedef


【解决方案1】:

错误:错误是由于初始化方式造成的。

声明1:line[1].code[1] = 10; //WORKS
语句2:line[2].code[10]= {0,0,1,0,1}; //Wrong

Statement2 说的类似于编译器:转到名为 line[2] 的结构数组并选择元素数组 code 转到它的第 10 个元素,这是错误的,因为只有内存为 8 个整数值保留,但因为没有限制签入 C 以使其非常正常并在那里粘贴一个 {0,0,1,0,1} 元素,这是不可能的,因为您要将这些值粘贴到那个元素。

更好的方法

   //Declaring variable SIZE thus prevent BOUND CHECKING.
     int size;        
     size = sizeof(line[1].code)/sizeof(line[0].code[0])); //COUNTING NO OF ELEMENTS
     for (loop = 0; loop<size; loop++)
         line[1].code[loop] = loop;            //INITIALING BY Values 0,1,2,3,4.... 

【讨论】:

  • sizeof(line[1].code)/sizeof(int) code 的数据类型,这将中断。将sizeof(int) 替换为sizeof(line[0].code[0]),无论code 是什么类型,它都可以工作。更强大。
  • 哦!是的,你是对的!感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 2014-01-26
  • 2015-09-23
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多