我正在使用atoi将字符串integer值转换为整数.但首先我想测试函数的不同情况,所以我使用了以下代码
#include <stdio.h>
int main(void)
{
char *a ="01e";
char *b = "0e1";
char *c= "e01";
int e=0,f=0,g=0;
e=atoi(a);
f=atoi(b);
g=atoi(c);
printf("e= %d f= %d g=%d ",e,f,g);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码返回e= 1 f= 0 g=0
我不知道为什么它返回1的"01e"
Jea*_*bre 11
那是因为atoi解析整数是一个不安全和过时的函数.
祝你好运确定用户输入是否有效(至少scanf-type函数能够返回0或1,无论字符串是否都不能作为整数解析,即使它们与以整数开头的字符串具有相同的行为). ..
使用诸如strtol检查整个字符串是数字的函数更安全,并且甚至能够告诉您在使用适当的选项集进行解析时哪个字符无效.
用法示例:
const char *string_as_number = "01e";
char *temp;
long value = strtol(string_as_number,&temp,10); // using base 10
if (temp != string_as_number && *temp == '\0')
{
// okay, string is not empty (or not only spaces) & properly parsed till the end as an integer number: we can trust "value"
}
else
{
printf("Cannot parse string: junk chars found at %s\n",temp);
}
Run Code Online (Sandbox Code Playgroud)