对于以下代码,klocwork报告未经验证的整数值'val'是从'atoi'接收的,可用于访问数组
int main(int argc, char **argv)
{
int i = 0;
int val = 0;
for (i = 0; i < argc; i++)
{
if (argv[i])
{
val = atoi(argv[i]);
......
......
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我无法解决这个问题.如果argv [i]不是数字,那么atoi将返回0.什么是klocwork在这里期待?
那么,这里第一个明显的建议是:停止使用atoi.atoi用于草绘,而不是用于实际代码.atoi没有任何故障反馈机制,并在溢出时产生未定义的行为.ato...集团的职能在C95中被半正式半遗弃.从那时起,他们只是为了向后兼容而进行标记.我不知道他们为什么还没有被正式弃用.
您希望将字符串转换为整数 - 使用strtol并记住通过分析errono和/或返回值来检查错误.并且,正如已经建议的那样,如果您将结果值用作数组索引,那么确保索引位于以下是一个好主意(对于来自外部世界的值 - 这是必须的)适当的范围.