C++二维字符数组存学生姓名报'char[8]初始化器过多'如何解决?
问题修复方案
错误原因
- 数组维度定义不匹配:你声明的
char name[5][8]仅支持存储最多5个长度不超过7的字符串,但是你实际需要存储8组、每组5个共40个学生姓名,初始化的数据量远大于数组声明的容量,因此触发初始化器过多的报错。 - 姓名长度预留不足:部分姓名例如
Adrielle共8个字符,算上字符串末尾的\0结束符至少需要9字节的存储空间,原来声明的8字节长度会导致内存溢出。 - 语法错误:缺少循环变量
i的类型声明、数组初始化语句末尾缺少分号、printf没有填写格式化字符串、遍历逻辑和数组结构不匹配。
修复代码(C++风格更简洁版,使用string避免内存溢出问题)
#include<iostream> #include<string> using namespace std; int main () { cout << "\tStudent name\n"; // 声明8行5列的string二维数组,对应40个学生姓名 string name[8][5] = { {"Airah", "Ariya", "Arissa", "Althea", "Annika"}, {"Alvin", "Adrielle", "Anthony", "Angelo", "Azriel"}, {"Belle", "Camila", "Clara", "Elize", "Felicity"}, {"Isabel", "Irish", "Kaila", "Kitchy","Kianna"}, {"Lucas", "Miracle", "Natalia", "Primo", "Paris"}, {"Rafael", "Ryan", "Rico", "Sky", "Serafine"}, {"Samantha", "Scott", "Timothy", "Theo", "Tyron"}, {"Winter", "Xyler", "Yohan", "Zachary", "Zhea"} }; // 双层循环遍历所有姓名输出 for (int row = 0; row < 8; row++) { for (int col = 0; col < 5; col++) { cout << name[row][col] << "\t"; } cout << "\n"; } return 0; }
如果你坚持要用char数组实现,修复后代码如下:
#include<iostream> #include<cstdio> using namespace std; int main () { cout << "\tStudent name\n"; // 8组,每组5个姓名,每个姓名最大长度预留20字节足够存储 char name[8][5][20] = { {"Airah", "Ariya", "Arissa", "Althea", "Annika"}, {"Alvin", "Adrielle", "Anthony", "Angelo", "Azriel"}, {"Belle", "Camila", "Clara", "Elize", "Felicity"}, {"Isabel", "Irish", "Kaila", "Kitchy","Kianna"}, {"Lucas", "Miracle", "Natalia", "Primo", "Paris"}, {"Rafael", "Ryan", "Rico", "Sky", "Serafine"}, {"Samantha", "Scott", "Timothy", "Theo", "Tyron"}, {"Winter", "Xyler", "Yohan", "Zachary", "Zhea"} }; for (int row = 0; row < 8; row++) { for (int col = 0; col < 5; col++) { printf("%s\t", name[row][col]); } printf("\n"); } return 0; }
内容的提问来源于stack exchange,提问作者RayAry
相关产品推荐
相关产品推荐

