C 在typedef结构中填充int数组时出错
我试图在Huffman结构中初始化代码数组,但编译时显示:C 在typedef结构中填充int数组时出错,c,arrays,struct,int,typedef,C,Arrays,Struct,Int,Typedef,我试图在Huffman结构中初始化代码数组,但编译时显示: 在“{”标记之前预期表达式出错。如何修复它 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]
在“{”标记之前预期表达式出错。
如何修复它
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};
错误:该错误是由于初始化方式引起的 语句1:
第[1]行。代码[1]=10;//有效
语句2:
行[2]。代码[10]={0,0,1,0,1};//错误
语句2与编译器类似:转到名为line[2]
的结构数组,选择元素数组code
转到它的10元素,这是错误的,因为只有8个整数值保留了内存,但由于在C中没有绑定检查,所以它非常正常,并粘贴一个{0,0,1,0,1}元素,这是不可能的,因为您要将这些值粘贴到该元素
更好的方法
//声明变量大小从而防止绑定检查。
整数大小;
size=sizeof(第[1]行。代码)/sizeof(第[0]行。代码[0]);//计算元素数
for(loop=0;loop第[1]行)。代码[10]
是UB。编译器肯定会为此抱怨(赋值时类型不兼容)code
只有8个元素。为什么要尝试赋值给索引10?赋值不能发生在函数sizeof(第[1]行)/sizeof(int)之外
O!没错,你是对的!感谢你的帮助:)
//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....