结构体数组赋值报错:expected expression before '{' token 问题求解
问题原因与解决方案
错误原因
C语言中,数组类型无法通过赋值运算符(=)进行整体赋值,哪怕是结构体内部的数组成员也不例外。你代码中第17行试图直接给Bookstore1.Books用大括号列表赋值,属于语法违规,编译器因此抛出"expected expression before '{' token"错误。
可行解决方案
方案1:定义结构体时直接初始化
在声明Bookstore1的同时,用初始化列表完成赋值,这是C语言允许的操作:
#include <stdio.h> #include <string.h> struct book{ char name[20]; int price; double rating; }; struct bookStore{ char nameStore[20]; struct book Books[2]; }; int main(){ struct bookStore Bookstore1 = { .nameStore = "新华书店", // 可选,也可以留空 .Books = {{"Javascript",300,4.2},{"Algorithm",200,2.5}} }; printf("%d",Bookstore1.Books[0].price); return 0; }
方案2:逐个元素赋值
分别给数组的每个元素单独赋值,字符串需要用strcpy函数复制:
#include <stdio.h> #include <string.h> struct book{ char name[20]; int price; double rating; }; struct bookStore{ char nameStore[20]; struct book Books[2]; }; int main(){ struct bookStore Bookstore1; // 给第一个书籍元素赋值 strcpy(Bookstore1.Books[0].name, "Javascript"); Bookstore1.Books[0].price = 300; Bookstore1.Books[0].rating = 4.2; // 给第二个书籍元素赋值 strcpy(Bookstore1.Books[1].name, "Algorithm"); Bookstore1.Books[1].price = 200; Bookstore1.Books[1].rating = 2.5; printf("%d",Bookstore1.Books[0].price); return 0; }
方案3:使用memcpy拷贝初始化好的数组
先创建一个同类型的数组并初始化,再用memcpy把数据拷贝到结构体的数组成员中:
#include <stdio.h> #include <string.h> struct book{ char name[20]; int price; double rating; }; struct bookStore{ char nameStore[20]; struct book Books[2]; }; int main(){ struct bookStore Bookstore1; struct book tempBooks[2] = {{"Javascript",300,4.2},{"Algorithm",200,2.5}}; memcpy(Bookstore1.Books, tempBooks, sizeof(tempBooks)); printf("%d",Bookstore1.Books[0].price); return 0; }
内容的提问来源于stack exchange,提问作者aiPho
相关产品推荐
相关产品推荐

