c - C 中的 atoi 返回 -1

标签 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 功能无法正常工作。

最佳答案

首先,您似乎实际上正在尝试将'0'..'9'范围中的单个数字字符转换为其相应的整数表示形式>0..9 范围。 atoi 不应该这样做。 atoi 期望一个字符串作为其输入,并且单个字符不是字符串。标准库中没有用于转换单个字符的函数,尽管您可以通过从字符值中减去 '0' 来轻松手动完成此操作。

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

关于c - C 中的 atoi 返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40345414/

相关文章:

c - 没有得到任何输出

将一个字符串复制到另一个

c - free() : invalid next size (normal) on fclose. 但当 Valgrind 运行时不会

c - C 中负数的环礁值

c++ - 当字符串表示零时使用atoi?

c - 从 fgets 获取第一个单词

c - queue.h库中struct的使用

c++ - 如何判断 c 函数 atoi 是否失败或是否是一串零?

c - atoi 似乎不适用于我的程序

将字符串数组转换为带有ascii码的数组