C 中的 atoi 返回 -1
atoi in C returning -1
我正在尝试读取 C 程序中的一些输入,但由于某种原因 atoi
正在返回 -1
。
我是不是做错了什么?
按照我的输入和我的代码:
输入:
20849603980134001723930671666823555245252804609722
53503534226472524250874054075591789781264330331690
算法:
loop here ( i++, j-- ) {
printf( "%c %d\n", A[ i ][ j ], atoi( &A[ i ][ j ] ) );
}
输出:
...
2 -1
5 -1
看2
和5
是输入的第一个数字。因此,打印为 %c
可以按预期工作,但 atoi
功能无法正常工作。
您输入的值大于 INT 类型
首先,您似乎实际上是在尝试将 单个数字字符 从 '0'..'9'
范围转换为 0..9
范围内的相应整数表示形式。 atoi
不应该那样做。 atoi
期望 string 作为其输入,单个字符不是字符串。标准库中没有用于转换单个字符的函数,尽管您可以通过从字符值中减去 '0'
来轻松地手动完成此操作。
其次,atoi
会在溢出时产生未定义的行为,考虑到输入的大小,这就是您的代码中发生的情况。不要使用 atoi
。该功能基本上是无用的。如果要转换字符串,请使用 strto...
组中的函数。
您忘记了 C 语言中的字符串是一个字符序列,后跟一个终止符。表达式 A[ i ][ j ]
是单个字符,将地址传递给该字符不会创建字符串,导致 atoi
溢出甚至可能超出范围并具有 未定义的行为.
但是,由于 C 标准要求所有数字都应连续编码,您可以通过执行以下操作轻松地从单个字符中获取数字: A[ i ][ j ] - '0'
.
我正在尝试读取 C 程序中的一些输入,但由于某种原因 atoi
正在返回 -1
。
我是不是做错了什么?
按照我的输入和我的代码:
输入:
20849603980134001723930671666823555245252804609722
53503534226472524250874054075591789781264330331690
算法:
loop here ( i++, j-- ) {
printf( "%c %d\n", A[ i ][ j ], atoi( &A[ i ][ j ] ) );
}
输出:
...
2 -1
5 -1
看2
和5
是输入的第一个数字。因此,打印为 %c
可以按预期工作,但 atoi
功能无法正常工作。
您输入的值大于 INT 类型
首先,您似乎实际上是在尝试将 单个数字字符 从 '0'..'9'
范围转换为 0..9
范围内的相应整数表示形式。 atoi
不应该那样做。 atoi
期望 string 作为其输入,单个字符不是字符串。标准库中没有用于转换单个字符的函数,尽管您可以通过从字符值中减去 '0'
来轻松地手动完成此操作。
其次,atoi
会在溢出时产生未定义的行为,考虑到输入的大小,这就是您的代码中发生的情况。不要使用 atoi
。该功能基本上是无用的。如果要转换字符串,请使用 strto...
组中的函数。
您忘记了 C 语言中的字符串是一个字符序列,后跟一个终止符。表达式 A[ i ][ j ]
是单个字符,将地址传递给该字符不会创建字符串,导致 atoi
溢出甚至可能超出范围并具有 未定义的行为.
但是,由于 C 标准要求所有数字都应连续编码,您可以通过执行以下操作轻松地从单个字符中获取数字: A[ i ][ j ] - '0'
.