【发布时间】:2018-07-03 00:39:03
【问题描述】:
为了巩固我对istream::getline 的理解,我测试了以下代码:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
string s("abcdefgh \nijklmnopqrst");
string s1;
stringstream ss(s);
ss >> s1;
cout <<"s1:"<< s1 << endl;
ss.getline(&s1[0], 250, '\n');
if(s1[0]==' '&&s1[1]=='\0')
cout << "new s1:"<<s1 << endl;
getchar();
return 1;
}
据我了解,ss.getline 调用将提取空格,而终止符 '\n' 然后将空格和 '\0' 分配给 s1[0] 和 s1[1] 分别指代 cpluscplus,s1[1] 之后的字符保持不变,因为一旦到达终止符,提取就会停止。但是让我意想不到的一点是s1可以打印出来。控制台打印
s1:abcdefgh
new s1: cdefgh
为什么在这种情况下可以打印字符串的'\0'之后的部分?
【问题讨论】:
-
当您的其他问题中的每个人都解释了错误的原因时,为什么您仍然仍在使用错误代码? stackoverflow.com/questions/48413784/…
-
@ZanLynx 我的编译器在使用
ss.getline(s1, 250, '\n')时会报错,我的IDE是visual studio -
@ZanLynx 编译器说没有找到重载函数的实例,
标签: c++ string iostream getline