我如何使用std :: cin.getline()与字符串

时间:2013-04-22 20:55:40

标签: c++ string

我对c ++中的字符串有疑问

我想从用户22字符中读取并将它们存储在字符串

我试过了:

std::string name;
std::cin.getline(name,23);

它显示错误。

将cin.getline与字符串一起使用的解决方案是什么?

3 个答案:

答案 0 :(得分:6)

您使用<string>中的std::getline(std::istream&, std::string&)代替。

如果要将内容限制为22个字符,可以使用std::string,就像将其传递给任何C风格的API一样:

std::string example;
example.resize(22); // Ensure the string has 22 slots
stream.getline(&example[0], 22); // Pass a pointer to the string's first char
example.resize(stream.gcount()); // Shrink the string to the actual read size.

答案 1 :(得分:0)

有两种不同的getline功能。一个是istream类的成员,大致如下:

std::istream &std::istream::getline(char *buffer, size_t buffer_size);

另一个是免费功能,如下所示:

std::istream &std::getline(std::istream &, std::string &);

你试图打电话给前者,但真的想要后者。

虽然我不相信前者已被正式弃用,但我怀疑大多数真正跟上他们“游戏”的C ++程序员会考虑这种方式 - 为了向后兼容它可能无法删除,但机会很多非常好,你永远不应该使用它。

答案 2 :(得分:0)

此代码读取22个字符并将它们放在一个字符串中。

char buf[22];
cin.read(buf, 22);
string str(buf, 22);

如果这真的是你想要的那么这就是代码。