C语言text[i]数据类型及strcmp传参类型转换错误问题解答
问题解答
1. text[i] 的数据类型
text 是 char* 类型的字符指针,指向字符串首地址,text[i] 是对指针做偏移i位后的解引用操作,得到的是**char类型**,本质是单字节的整数类型,存储单个字符的ASCII值。
2. 报错的实际成因
C标准库中strcmp函数的原型为:
int strcmp(const char *s1, const char *s2);
该函数的两个入参都要求是指向以'\0'结尾的字符串的指针:
- 代码里第一个入参传的是
" "、"."这类双引号包裹的字符串字面量,类型是const char*,符合参数要求; - 第二个入参传的
text[i]是char类型的单字符值,不属于指针类型,编译器无法把单字符整数隐式转换为const char*指针,因此抛出类型不兼容的报错。
修复方案
要判断单个字符是否匹配,不需要调用字符串比较函数,直接用==匹配单字符字面量(单引号包裹)即可,修改后的判断逻辑参考:
if(text[i] == ' ' || text[i] == '.' || text[i] == '!' || text[i] == '?' || text[i] == ',')
内容的提问来源于stack exchange,提问作者Bonsai
相关产品推荐
相关产品推荐

