c++ - vector 大小受 std::cin 影响?

标签 c++ vector stl cin

我遇到了一个非常奇怪的错误,其中 std::vector 的大小在接收到 std::cin 输入后发生了变化。我已经隔离了问题,但我不明白为什么会这样:

int main()
{
    std::vector<int> asdf;
    asdf.push_back(1);
    asdf.push_back(42);

    printf("Size: %d\n",asdf.size());   //prints 2...

    char buffer[4];
    printf("Input 4 random characters:");
    std::cin >> buffer;

    printf("\n%d\n",asdf.size());     //prints 32???
}

当我评论std::cin >> buffer;时,错误并没有发生。谁能指出为什么会这样?这是由于 vector 和 iostream 之间的某种联系吗?我很困惑...

最佳答案

您需要 4 个字符,并且在它们之后有一个 NULL 字符,但是您有一个包含 4 个字符的数组。所以将数组更改为 char buffer[5];

为什么会出现这个问题?输入4个字符后,它会将它们放入buffer[0],buffer[1],buffer[2],buffer [3] 最后它会在 buffer[4] 中放入一个 NULL。但是你没有buffer[4]的地方,所以它会被写在与 vector 实例相关的空间中。这会改变你的 vector 。你的堆栈内存是这样的:

| ... Vector Instance Memory... | buffer[3] | buffer[2] | buffer[1] | buffer[0] |
                               ^this is the place where buffer[4] refers to

关于c++ - vector 大小受 std::cin 影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124761/

相关文章:

c++ - 客户端和服务器之间的通信不稳定

c++ - MTL4 将一元运算符(例如 abs())逐元素应用于 dense_vector<double>

c++ - 如何从用户那里获取整数输入,直到在 C++ 中遇到输入

c++ - std::function 可以存储指向数据成员的指针吗?

c++ - 如何将两个 vector 复制到 C++ 中的另一个 vector

c++ - 使用 C++ 在二叉搜索树中存储值

c++ - 如何在编译时循环一个元组?

c++ - STL 容器上的 lambda+for_each+delete

c++ - 如何根据类属性在 vector 中找到对象?

c++ - Visual Studio 报告结构 vector 上的 push_back() 函数调用错误