You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

结构体数组赋值报错: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:18:15