gpt4 book ai didi

c++ - istream 中的 getline 和 basic_string 中的 getline

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:00 29 4
gpt4 key购买 nike

string text;
getline(text.c_str(),256);

1) 我收到错误消息“错误:没有匹配函数来调用‘getline(const char*, int)”上面有什么问题,因为 text.c_str() 也返回一个指向字符数组的指针。

如果我这样写

char text[256]
cin.getline(text, 256 ,'\n');

它工作正常。 cin.getline 和 getline 有什么区别?

2)怎么会

text string;
getline(cin,text,'\n')

接受整行作为输入。这个字符数组的指针在哪里?

最佳答案

text.c_str()返回一个 const char * .您不得使用它来修改字符串的内容,以任何方式。它的存在只是为了让您无需复制即可将字符串数据传递给旧的 C API 函数。不允许您进行更改,因为保存数据的字符串对象不可能找到它们,因此这将允许您破坏字符串的不变量。

此外,std::getline 接受完全不同的参数。 (如果你花两秒钟在谷歌中输入'std::getline',你就会知道这一点。)错误的意思正是它所说的:“没有匹配的调用函数”意味着“你不能用这些类型调用函数参数”,因为函数的每个重载都接受不同的东西(并且不兼容)。

std::getline接受这些参数:

  • 一个流。你必须传递它,否则它不知道从哪里读取。
  • 要读入的字符串对象。 不是字符缓冲区。
  • 可选,行分隔符 char(与流 getline 成员函数相同)。

实际上并没有“cin.getline”这样的函数。您正在调用的是对象“cin”的成员函数“getline”——一个在您#include <iostream> 时为您定义的全局变量。 .我们通常根据定义函数的类来引用它 - 因此,std::istream::getline .

std::istream::getline接受这些参数:

  • 一个字符缓冲区。
  • 可选,行分隔符字符。

它不需要流参数,因为它是流的成员函数:它使用我们调用它的任何流。

关于c++ - istream 中的 getline 和 basic_string 中的 getline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4564792/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com