【发布时间】:2012-01-07 01:43:16
【问题描述】:
这是一个简单的问题。我写了这段 C++ 代码:
char chaine[12];
cin.width(12);
cin >> chaine;
但如果我在运行时输入一些超过 12 个字符的文本,Visual Studio 会通知我堆栈现在已损坏。
我知道问题是缓冲区溢出。但我认为“宽度”方法可以防止这种情况。
如果宽度方法不能防止缓冲区溢出,谁能向我解释一下它的功能是什么?我在网上搜索,但没有找到任何东西。
谢谢!
【问题讨论】:
-
还有更多代码吗?这对我来说看起来不错。我看到的唯一问题是
chaine不会以零结尾,这可能会导致以后出现问题。 -
你知道有更好的方法,对吧?
std::string chaine; std::cin >> chaine;。无需担心缓冲区溢出。 -
整个代码如下: int main () { char chaine[12]; cin.width(12); cin >> 链;返回0; }
-
@Phil:cHao 是对的。只需在 C++ 中使用
std::string。 -
是的。我知道改用“字符串”。但我也想了解这一点以及为什么它不起作用。
标签: c++ file io buffer-overflow