C语言字符串数组手动赋值触发类型不匹配错误的原因排查
问题原因分析
你贴出的代码本身在标准C语法中是完全合法的:
const char *built_in_commands[7]; built_in_commands[0] = "blah"; built_in_commands[1] = "hmm";
这段代码声明了一个包含7个const char*指针的数组,给前两个指针赋值指向字符串字面量的操作没有类型问题。
出现“无法使用char[5]类型的值初始化'int[0]'类型的实体”这类错误,大概率是以下几种情况导致:
- 变量名被意外重定义:如果代码前序存在
#define built_in_commands int[0]这类宏定义,或者typedef int built_in_commands[0];的类型别名,会让编译器把你的数组声明解析成错误类型,最终赋值时触发类型不匹配。 - 声明语句存在语法错误:比如你实际编写的声明漏掉了
*,写成了const char built_in_commands[7];,此时built_in_commands是char数组,built_in_commands[0]是单个char类型,赋值字符串字面量必然触发类型错误;或者声明时符号、括号位置错误,导致编译器误判变量类型为int数组。 - 编译环境/设置异常:在老旧编译器、错误启用C++编译模式(且存在隐式类型转换冲突)等非标准C环境下,也可能出现这种异常的类型提示。
你提到用strcpy也触发错误,这进一步验证了目标变量的类型被编译器识别成了int数组而非字符指针数组——strcpy要求第一个参数是char*类型,若目标是int数组,自然会触发类型兼容错误。
内容的提问来源于stack exchange,提问作者codegeas
相关产品推荐
相关产品推荐

