矢量大小受 std::cin 影响
Vector size affected by std::cin?
我遇到了一个非常奇怪的错误,其中std::vector的大小在收到std::cin输入后发生变化。我已经隔离了问题,但我不明白为什么会发生这种情况:
int main()
{
std::vector<int> asdf;
asdf.push_back(1);
asdf.push_back(42);
printf("Size: %dn",asdf.size()); //prints 2...
char buffer[4];
printf("Input 4 random characters:");
std::cin >> buffer;
printf("n%dn",asdf.size()); //prints 32???
}
当我std::cin >> buffer;
评论时,错误没有发生。谁能说明为什么会这样?这是由于矢量和iostream之间的某种联系吗?我很困惑...
您需要 4 个字符,并在它们后面加上一个NULL
字符,但您有一个包含 4 个字符的数组。因此,将数组更改为char buffer[5];
为什么会出现此问题?输入 4 个字符后,它会将它们放入 buffer[0]
、 buffer[1]
、buffer[2]
、 buffer[3]
中,最后它会在 buffer[4]
中放入一个NULL
。但是你没有buffer[4]
的位置,所以它将被写入与向量实例相关的空间中。这会更改您的向量。你的堆栈内存是这样的:
| ... Vector Instance Memory... | buffer[3] | buffer[2] | buffer[1] | buffer[0] |
^this is the place where buffer[4] refers to
buffer
中的最后一个字符保留给