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

C语言自定义输入校验函数调用strcmp出现整数转指针无强制类型转换警告

警告产生原因
  1. strcmp函数的两个入参要求均为char*类型(指向字符串首地址的指针),但你自定义的check函数形参定义为char inp,属于单字符整数类型,类型不匹配。
  2. main函数中定义的inp是char[20]字符数组,作为参数传递时会自动退化为char*指针,但check函数用单字符类型接收该指针,相当于把字符串地址截断为单个整数值,再将该整数值作为地址传入strcmp,因此触发了「将整数转为指针未做强制类型转换」的编译警告。
  3. 逻辑直接写在main中可正常运行的原因是,main中直接访问inp数组时,数组会自动转为合法的char*指针,符合strcmp的入参要求。
解决方案

核心修改

调整check函数的形参类型,改为接收字符串指针:
将原代码的

int check(char inp)

修改为

// 两种写法等价,数组形参会自动退化为指针
int check(char* inp)
// 或者 int check(char inp[20])

附加修复

  • 给check函数中的c变量设置初始值,避免未匹配到选项时返回未初始化的垃圾值:
int c = 0; // 匹配失败时默认返回0
  • 废弃不安全的gets函数,替换为fgets避免缓冲区溢出风险,示例替换代码:
fgets(inp, sizeof(inp), stdin);
// 去掉fgets读取到的末尾换行符
inp[strcspn(inp, "\n")] = '\0';

内容的提问来源于stack exchange,提问作者user15095227

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 05:24:00