【发布时间】:2013-04-30 15:45:06
【问题描述】:
我尝试使用gets() 函数输入数据,但每当程序执行到达带有gets 的留置权时,它就会忽略它。
当我在没有先前数据输入的情况下使用gets() 时,它运行正常。但是当我在数据输入后使用它时,就会出现问题。
这是在先前数据输入后使用的代码(因此在执行中我无法将数据输入到字符串):
int main() {
char str[255];
int a = 0;
cin >> a;
if(a == 1) {
gets(str);
cout << "\n" << str << endl;
}
}
我该如何解决这个问题?
注意:cin.getline 也是如此
【问题讨论】:
-
你永远不要使用gets()!从根本上说,这是不安全的,也不可能确保安全。另外,不要混合使用 C 和 C++ I/O。现在对于 cin.getline,这是一个更有趣的问题,我刚刚在这里回答了:stackoverflow.com/questions/16405630/…
-
永远,永远,永远使用
gets。您无法可靠地避免超出缓冲区并导致各种麻烦。至少使用fgets代替......但在C++ 中,你几乎总是使用std::getline(cin, a_std_string_variable)做得更好。 -
为什么这道题的标题是C,标签却是C++?
-
因为人们经常将这两者混淆,令人痛心。由于这是一个 C++ 问题,它可能已被编辑重新标记。
-
从 2011 ISO C 标准开始,
gets已从语言中删除。