我试图在以下字符串上调用 atoi():“54”和“54df4”。虽然第一个输入给了我 54 的正确结果,但对第二个字符串的调用也给了我 54 的结果。我假设该函数正在尽可能地将字符串转换为十进制;相反,它根本不应该转换。为什么会这样?以下是我的代码:
cout << "Wrong: " << atoi("54df4") << endl;
谢谢,拉克什。
我试图在以下字符串上调用 atoi():“54”和“54df4”。虽然第一个输入给了我 54 的正确结果,但对第二个字符串的调用也给了我 54 的结果。我假设该函数正在尽可能地将字符串转换为十进制;相反,它根本不应该转换。为什么会这样?以下是我的代码:
cout << "Wrong: " << atoi("54df4") << endl;
谢谢,拉克什。
这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");
}
来自atoi 的文档
字符串可以在构成整数的字符之后包含其他字符,这些字符将被忽略并且不会影响此函数的行为。
从以下有点武断地找到atoi的手册页......
http://linux.die.net/man/3/atoi
* atoi() 函数将 nptr 指向的字符串的初始部分转换为 int。*
简而言之,该功能完全按照它的定义工作。