为什么std :: adressof()在无效输入上的行为如此?

时间:2016-04-27 21:54:28

标签: c++ pointers

所以说我有以下代码:

int main(int argc, char *argv[])
{
    int input;
    cin >> input;
    cout << std::addressof(input) << endl;
    main(argc, argv);
}

如果你给它一个有效的int输入它只会打印一个普通的地址,但是,如果你给它一个无效的值(即“这是一个字符串值”,“kasdkjadlksnkqlw~”或9999999999999999999)它将继续打印地址

为什么它会像这样?这是一个所谓的缓冲区溢出吗? 附加:如何在本网站上启用语法高亮显示?

1 个答案:

答案 0 :(得分:5)

让我们调用函数meow(或将其放入命名空间),因为使用::main会使程序格式不正确。

int meow(int argc, char *argv[])
{
    int input;
    cin >> input;
    cout << std::addressof(input) << endl;
    meow(argc, argv);
    return 0;
}

失败的流提取在流上设置failbit。以后对该流的提取操作将立即失败而不会阻塞输入,因此您会反复(明显)无限递归打印地址。

(你的代码无论如何都有无限递归;唯一的区别是当cin >> input阻塞时它不那么明显。)