所以说我有以下代码:
int main(int argc, char *argv[])
{
int input;
cin >> input;
cout << std::addressof(input) << endl;
main(argc, argv);
}
Run Code Online (Sandbox Code Playgroud)
如果你给它一个有效的int输入它只会打印一个普通的地址,但是,如果你给它一个无效的值(即"这是一个字符串值","kasdkjadlksnkqlw~"或9999999999999999999),它将继续打印地址.
为什么它会像这样?这是一个所谓的缓冲区溢出吗?附加:如何在本网站上启用语法高亮显示?
让我们调用函数meow(或将其抛入命名空间),因为使用::main会使程序格式错误.
int meow(int argc, char *argv[])
{
int input;
cin >> input;
cout << std::addressof(input) << endl;
meow(argc, argv);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
流failbit上的失败流提取集.以后对该流的提取操作将立即失败而不会阻塞输入,因此您会一次又一次地(显而易见)无限递归打印地址.
(你的代码无论如何都有无限递归;唯一的区别是它在cin >> input块时不那么明显.)