2

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

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

我试过了:

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

它显示一个错误。

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

4

3 回答 3

7

你使用std::getline(std::istream&, std::string&)from<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.
于 2013-04-22T20:57:02.233 回答
1

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

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

另一个是自由函数,如下所示:

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

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

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

于 2013-04-22T21:04:02.800 回答
1

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

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

如果这确实是您想要的,那么这就是代码。

于 2013-04-22T21:06:25.737 回答