C语言‘Excess elements in scalar initializer’错误解析与解决示例
解决“Excess elements in scalar initializer”错误及二维数组动态赋值方案
错误原因
你的代码存在两个关键问题:
- 数组访问错误:
box[15][2]是在访问二维数组的单个int元素,且已越界——C语言数组下标从0开始,box是15行2列的数组,合法下标范围是box[0][0]到box[14][1]。单个int属于标量类型,不能用{{...}}这种数组初始化列表赋值,这就是编译器报错的核心原因。 - 字符串比较错误:用
hand == "right"比较字符串无效,C语言中字符串本质是指针,==只会比较指针地址,不会对比字符串内容,必须用strcmp函数。
正确实现示例
#include <string.h> // 初始化二维数组为全0 int box[15][2] = {{0}}; // 预先定义右手模式的目标数据 int right_box[15][2] = { {45,85}, {45,75}, {45,65}, {65,85}, {65,75}, {65,65}, {25,85}, {25,75}, {25,65}, {5,85}, {5,75}, {5,65}, {85,85}, {85,75}, {85,65} }; // 用strcmp比较字符串内容 if (strcmp(hand, "right") == 0) { // 用memcpy批量复制数组内容到box memcpy(box, right_box, sizeof(box)); }
补充说明
memcpy可高效批量复制数组内容,需包含头文件<string.h>- 若不想预先定义临时数组,也可通过循环逐个元素赋值,但
memcpy效率更高
内容的提问来源于stack exchange,提问作者Q With Only
相关产品推荐
相关产品推荐

