以下是我提到的程序:
string s;
cout<<"Enter a string:";
gets(s);我希望我的输入是:"Hilton Hotels“。
在使用get时,我得到以下错误:
error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘char*’ for argument ‘1’ to ‘char* gets(char*)’我不能使用"cin“,因为我希望我的输入由空格和特殊字符组成,如”_“等,我还希望我的分隔符是”enter“。有没有其他的way...or,请帮我纠正这个错误。
发布于 2012-06-29 21:04:06
gets不太像c++ (它是为了与C语言兼容)。使用以下命令:
#include <iostream>
#include <string>
int main()
{
std::getline(std::cin, s);
std::cout << s << '\n';
}此外,还可以查看std::ios::skipws和中的空白处理选项
发布于 2012-06-29 21:04:27
我不能使用"cin“,因为我希望我的输入由空格和特殊字符组成
您可以使用cin。
还有其他的way...or吗?请好心纠正这个错误。
gets接收char*,因此使用char*而不是string。
发布于 2012-06-29 21:10:53
第一个问题:‘get’接受一个要读入的字符数组。你不能给它一个stl字符串,这没有任何意义。你需要做像这样的事情
char buf[1024];
gets(buf);第二个问题:‘get’来自旧的C stdio库。你不应该尝试把stdio访问和C++风格的i/o混在一起--每个库都有自己的缓冲,只会导致混淆。如果您使用一个作为输入,另一个作为输出,您可能不会受到影响,但这不是一个好主意--学习使用C++样式的输入来做您想做的事情(std::getline,我认为这是您需要的例程)。
第三,大的喇叭问题:‘get’是早在C语言早期的一个讨厌的等待函数,不能安全地使用。永远不要尝试使用‘get’。
问题是“get”不知道它正在读取的缓冲区的大小,所以它总是能够溢出该缓冲区并覆盖内存(导致各种潜在问题)。不要试图在任何事情中使用gets。如果要进行stdio样式的输入,请使用
fgets(buf, bufsize, stdin)它接受一个缓冲区大小,并且不会超载它的输入缓冲区。
https://stackoverflow.com/questions/11262313
复制相似问题