我遇到了一个非常奇怪的错误,其中 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/