为什么ATOI在此代码中返回0?

时间:2012-12-07 06:57:51

标签: c atoi

我刚刚开始使用C而且我正在尝试学习ATOL功能。有人能告诉我它为什么一直打印0?我知道这意味着转换无法执行,但我不确定原因。

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    int i = atoi ("  bl149");
    printf("%d\n", i);  
    return 0;
}

2 个答案:

答案 0 :(得分:5)

atoi基本上将具有数字的字符串转换为整数1,并且将转换的任何字符串将成为它的返回值。 要么 更精确的atoi函数从字符串的开头开始检查。如果它有数字(仅从开始),那么它将以整数形式返回该值。 下面的例子将清除这个概念 例如

atoi("1234") 
--> it will convert string "1234" in to integer and return it 
         --> i.e. ouput is 1234
atoi("1234abcd") --> i.e. ouput is 1234
atoi("a1234abcd") --> i.e. ouput is 0   

在你的情况下,因为你的字符串从b(“b1149”)开始,所以它将返回0

答案 1 :(得分:2)

你究竟不懂什么? " bl149"不是数字的有效表示。因此,atoi会在错误输入的情况下返回0。这里的所有都是它的。

有效表示可以从空白字符序列开始,但必须后跟可选的+/-和十进制数字序列。您的空白序列后跟bb不是十进制数字。

您是如何期待它的?您希望atoi在这种情况下做什么?