我试图在以下字符串上调用atoi():“54”和“54df4”。虽然第一个输入给了我54的正确结果,但第二个字符串的调用也给了我54的结果。我假设该函数尽可能将字符串转换为十进制;相反,它根本不应该转换。 为什么会这样?以下是我的代码:
cout << "Wrong: " << atoi("54df4") << endl;
谢谢,勒凯什。
答案 0 :(得分:4)
这就是atoi
指定工作的方式。如果您不想转换包含非数字字符的字符串,则必须预先扫描该字符串,或使用strtol
之类的函数,该函数可以返回第一个非数字字符的位置:
cons char *number = "54df4";
char *endp = NULL;
int value = strtol(number, &endp, 10);
if (endp != NULL && endp < (number + strlen(number)))
{
printf("Stopped scanning in middle of string, it contains non-digit characters\n");
}
答案 1 :(得分:2)
该字符串可以包含其他字符后形成的字符 整数,被忽略并且对行为没有影响 这个功能。
答案 2 :(得分:1)
因为这是atoi
的定义方式。以this手册页为例:
atoi()
函数将nptr
指向的字符串的初始部分转换为int
。
或者在C标准中:
C11(n1570),§7.22.1.2
atoi
,atol
和atoll
函数
atoi
,atol
和atoll
函数将nptr指向的字符串的初始部分转换为int
,long int
和{{ 1}}表示,分别。
long long int
(例如,请参阅this answer)。答案 3 :(得分:1)
从下面有点随意找到atoi的手册....
http://linux.die.net/man/3/atoi
* atoi()函数将nptr指向的字符串的初始部分转换为int。 *
简而言之,该功能完全按照定义的方式工作。