看下面的程序(本程序是在C++ Primer Plus 第六版看的),
#include<iostream>
#include<string>
#include<cstring>
int main(){
using namespace std;
char charr[20];
string str;
cout << "Legth of string in charr before input:"
<< strlen(charr) << endl;
cout <<" Length of string in str before input:"
<< str.size() << endl;
cout << "Enter a line of text:\n";
cin.getline(charr,20);
cout << "You entered:" << charr << endl;
cout << "Enter another line of text: \n";
getline(cin,str);
cout << "You entered: " << str << endl;
cout << "Length of string in charr afrer input :"
<< strlen(charr) << endl;
cout << "Length of string in str after inout:"
<< str.size() << endl;
return 0;
}
输出结果:
在输入之前数组charr的字符串长度为23,这是由于charr没有初始化,函数strlen()从数组第一个元素开始计算字节数,知道遇到空字符。
下面才是重点:
cin.getline(charr,20)这种句点表示法说明getline()是istream累的一个类方法,第一个参数是目标数组,第二个参数是数组长度,避免越界。
getline(cin,str)没有使用句点表示法,说明getline()不是类方法,第一个参数表示从哪里查找输入,第二个参数表示目标参数。这个函数式string类的友元函数。
还有个现象时使用getline(cin,str),输入字符串后回车,还得在回车一次才能自行下面的程序。