C中的atoi返回-1

时间:2016-10-31 15:32:35

标签: c atoi

我试图在C程序中读取一些输入但由于某种原因atoi正在返回-1

我做错了吗?

按照我的输入和我的代码:

输入

20849603980134001723930671666823555245252804609722
53503534226472524250874054075591789781264330331690

算法

loop here ( i++, j-- ) {

      printf( "%c %d\n", A[ i ][ j ], atoi( &A[ i ][ j ] ) );

}

输出

...
2 -1
5 -1

看看25是输入的第一个数字。因此,%c打印正在按预期工作,但atoi功能无法正常工作。

3 个答案:

答案 0 :(得分:2)

首先,您似乎正在尝试将单位数字'0'..'9'范围转换为0..9范围内的相应整数表示。 atoi不应该这样做。 atoi期望字符串作为输入,单个字符不是字符串。标准库中没有用于转换单个字符的功能,尽管您可以通过从字符值中减去'0'来轻松地手动执行此操作。

其次,atoi在溢出时产生未定义的行为,考虑到输入的大小,这就是代码中发生的行为。不要使用atoi。该功能基本上没用。如果要转换字符串,请使用strto...组中的函数。

答案 1 :(得分:1)

你忘了C中的字符串是一个字符序列,后跟一个终结符。表达式A[ i ][ j ]是单个字符,将地址传递给该字符不会创建字符串,导致atoi溢出,甚至可能超出范围并具有未定义的行为

但是,由于C标准要求所有数字都应连续编码,因此您可以通过例如单个字符轻松地从单个字符中获取数字。 A[ i ][ j ] - '0'

答案 2 :(得分:0)

您的输入值大于INT类型