我是一个C++的新手,尝试解决Project Euler中的一个问题时,遇到了一个非常奇怪的问题。我将错误缩小到以下代码。
考虑以下简单的代码:
#include <iostream>
using namespace std;
int main() {
int numdigits;
cout << "digits: ";
cin >> numdigits;
char tmpchar;
cin >> tmpchar;
cout << atoi(&tmpchar) << endl;
return 0;
}
基本上,如果第一个输入(numdigits)小于48,一切正常,但如果输入大于或等于48,则会出现非常奇怪的行为:
air:programming santi$ ./lol
digits: 30
3
3 <--- OK
air:programming santi$ ./lol
digits: 48
3
30 <--- Not OK
air:programming santi$ ./lol
digits: 49
3
31 <--- Not OK
air:programming santi$ ./lol
digits: 50
3
32 <--- Not OK
发生了什么?我因为试图找出算法中的错误而发疯,直到我发现错误在代码的那一部分,我一开始没有去看。
提前感谢!
NOT OK
?预期的输出结果是什么?atoi()
函数需要一个以NULL
结尾的 c 风格字符串作为参数,这可能是问题所在。tmpchar
直接后面的内存没有初始化,可能是任何值。 - Chad