C语言定义char数组出现excess elements in char array initializer错误
C语言关键字匹配功能修复方案
报错根因
你遇到的两个编译报错核心原因是数组类型定义错误:
- 你声明的
arr是char类型数组,仅能存储单个字符,而初始化时传入的是多个字符串字面量,类型完全不匹配,因此触发元素过量的初始化报错。
其他代码逻辑问题
除了数组定义错误外,原有代码还存在多处逻辑错误无法实现预期功能:
- 存储用户输入的
word被定义为char类型,仅能存储单个字符,无法匹配长度大于1的关键字 - 输入使用
%d格式符读取字符,类型匹配错误,无法正确接收用户输入的字符串 - 直接使用
==运算符对比字符串,只会对比两个字符串的首地址,不会对比内容,永远无法匹配成功 - 循环内每遍历一个元素就输出一次结果,会连续输出7次内容,不符合功能预期
修复后完整代码
#include <stdio.h> #include <string.h> int main(){ char word[20]; scanf("%s", word); char* arr[7] = {"break", "case", "continue", "default", "else", "defer", "for"}; int i, n = 7, found = 0; for(i = 0; i < n; i++){ if(strcmp(word, arr[i]) == 0){ found = 1; break; } } if(found){ printf("Keyword Found"); } else { printf("Keyword Not Found"); } return 0; }
核心改动说明
- 将
arr修改为char*类型的指针数组,用来存储多个字符串字面量的首地址 - 新增引入
<string.h>头文件,使用strcmp函数对比两个字符串的内容是否相等 - 将
word修改为长度20的字符数组,用来存储用户输入的完整字符串,输入格式符替换为%s - 新增
found标记位,匹配到关键字后置位并跳出循环,循环结束后统一输出匹配结果
内容的提问来源于stack exchange,提问作者Vaibhav Katre
相关产品推荐
相关产品推荐

