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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:36:03