clang-tidy提示「考虑使用strtol替代scanf」的具体含义是什么?
Clang-Tidy 提示具体含义
这条提示是针对你代码中scanf("%i", &userDOB)这行整数输入逻辑的安全提醒,核心信息如下:
scanf执行字符串到整数的转换逻辑时,本身不会主动抛出转换错误,仅会通过返回值传递匹配成功的参数个数。你当前的代码未对scanf的返回值做校验,如果用户输入非数字字符、输入的数值超出int类型取值范围,userDOB会变为未定义值,程序直接使用该值会触发未定义行为。- Clang-Tidy 更推荐你使用
strtol完成字符串到整数的转换:strtol可以通过返回值、errno全局变量明确区分「输入无有效数字」「数值溢出」「转换正常」等多种状态,错误处理的可控性远高于直接用scanf做整数转换。
常见规避方案
你可以二选一解决该警告:
- 补充
scanf返回值校验逻辑,示例如下:
if (scanf("%i", &userDOB) != 1) { // 此处添加输入错误的处理逻辑,比如提示用户重新输入、退出程序等 printf("输入的出生日期格式非法\n"); return 1; }
- 按提示改用
strtol做整数转换,流程为:先读取用户输入的整行字符串,再调用strtol转换,同时校验转换状态。
内容的提问来源于stack exchange,提问作者ABDO-AR
相关产品推荐
相关产品推荐

