咨询C语言编译警告‘makes integer from pointer without a cast’的含义
编译警告解析
问题中的编译警告信息
assignment to 'char' from 'char *' makes integer from pointer without a cast [-Wint-conversion] 31 | array[kategori] = "Best Pick"; | ^ t02.c:36:25: warning: assignment to 'char' from 'char *' makes integer from pointer without a cast [-Wint-conversion] 36 | array[kategori] = "Must Read"; | ^ t02.c:40:25: warning: assignment to 'char' from 'char *' makes integer from pointer without a cast [-Wint-conversion] 40 | array[kategori] = "Recommended"; | ^ t02.c:44:25: warning: assignment to 'char' from 'char *' makes integer from pointer without a cast [-Wint-conversion] 44 | array[kategori] = "Average"; | ^ t02.c:47:25: warning: assignment to 'char' from 'char *' makes integer from pointer without a cast [-Wint-conversion] 47 | array[kategori] = "Low";
对makes integer from pointer without a cast的解释
这个警告的核心是类型不匹配引发的隐式转换风险,具体拆解:
- 类型本质差异:代码里的
array[kategori]是单个char类型(属于整数类型),而右侧的"Best Pick"这类字符串字面量,本质是char*指针——它指向字符串在内存中首字符的存储地址。 - 隐式转换行为:C语言会自动尝试把
char*指针(内存地址本身是整数类数值)转换成char类型的整数,但这种转换没有显式强制类型转换语句,编译器无法判断你是故意这么做还是代码逻辑写错,因此抛出警告。 - 背后的逻辑错误:你显然想把完整字符串存入数组元素,但如果
array是char类型数组,单个元素只能存储一个字符,根本容纳不了字符串。正确的做法应该是将array定义为char*类型数组(用来存储字符串指针),或者用strcpy这类函数把字符串复制到足够长度的char数组元素中。
内容的提问来源于stack exchange,提问作者tennov pakpahan
相关产品推荐
相关产品推荐

