获取错误
Error with gets
我下面提到的程序:
string s;
cout<<"Enter a string:";
gets(s);
我希望我的输入形式是:"希尔顿酒店"。
在使用gets时,我收到以下错误:
error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘char*’ for argument ‘1’ to ‘char* gets(char*)’
我不能使用"cin",因为我希望我的输入由空格和特殊字符(如"_"等)组成,我也希望我的分隔符是"enter"。还有其他方法吗...或者请善意地纠正错误。
gets
不是很C ++(它是为了与C兼容)。使用这个:
#include <iostream>
#include <string>
int main()
{
std::getline(std::cin, s);
std::cout << s << 'n';
}
另请查看std::ios::skipws
和<iomanip>
以获取空格处理选项
我不能使用"cin",因为我希望我的输入由空格和特殊字符组成
您可以使用cin
.
还有其他方法吗...或者请善意地纠正错误。
gets
收到char*
,所以使用char*
而不是string
。
第一个问题:"gets"需要一个字符数组来读取。你不能给它一个 stl 字符串,这没有任何意义。你需要做一些类似的事情
char buf[1024];
gets(buf);
第二个问题:"gets"来自较旧的C stdio库。您不应该尝试将 stdio 访问与C++式 I/O 混合使用 - 每个库都维护自己的缓冲,只会导致混淆。如果你使用一个用于输入,另一个用于输出,你可能会侥幸逃脱,但这是一个坏主意 - 学会使用C++风格的输入来做你想做的事情(std::getline,我认为,是你需要的例程)。
第三,大喇叭问题:"gets"是C早期那些令人讨厌的保留功能之一,不能安全地使用。永远不要尝试使用"获取"。
问题是"gets"不知道它读取的缓冲区的大小是多少,所以它总是能够溢出缓冲区并覆盖内存(导致各种潜在问题)。永远不要尝试使用任何东西。如果要执行 stdio 样式输入,请使用
fgets(buf, bufsize, stdin)
它采用缓冲区大小,并且不会溢出其输入缓冲区。
相关文章:
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 使用 strcat 获取缓冲区溢出错误
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 在 alglib::real_1d_array 中获取元素总和的奇怪错误
- 无法使函数公开。获取:"LNK2005"错误。如何调试链接器错误
- 为什么我在空指针错误(链表)中获取成员访问权限
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 获取毫秒延迟的错误值
- 获取 clang++:错误:在编译文件系统库的代码时
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息
- 从两个 4x64 位整数数组中获取取模
- 如何在常量计算表达式中获取编译时错误?
- Assimp 库错误:获取打包成员的地址
- 错误:获取临时地址
- [错误]获取C++中临时数组的地址
- 错误:获取临时[-fpermissive] -npc_multivendor的地址
- C++:为“char [4]”数组错误获取太多初始值设定项
- 字符串数据成员的指针错误 - 获取访问冲突
- 调用派生类时 - 错误:获取临时 [-fallowive] 的地址