for () {
char s[5];
cin.get(s, 5);
test.push_back(s);
}
以上执行后发现test输出的全都是最后一次pushback进去的值。
原因猜测:
因为我对c/c++学习的不多,所以看法可能不准确。
由于s没有用new分配空间,所以整个for循环的过程中,s始终表示内存的同一块空间,每一次pushback进去的都是同一块内存空间的地址,所以每次循环都只是在用新值覆盖旧值。正确的写法应该是:
for () {
char *s=new char[5];
cin.get(s, 5);
test.push_back(s);
}
存储n个值必然需要n个相应的内存空间,而第一段程序从始至终只用了一块内存空间,所以会出现错误
本文解析了在C++中使用cin.get读取字符串并存储到std::vector时出现的问题,即所有元素指向同一内存地址导致的数据覆盖现象。通过对比错误与正确的代码实现,阐述了动态内存分配的重要性。
604

被折叠的 条评论
为什么被折叠?



