昨天写学校的一个c++ server作业,意外发现的字符串打印出来加一个空格之后就被吞了。
如下所示:
string version = request.getVersion();
cout << version << " " << endl;
打印结果是:
TTP/1.1
第一个"H"莫名其妙被空格给吞了,百思不得其解。
后来发现,原来是getline的错。老师要求的分行符是"\r\n",而getline默认的分行符是"\n",所以在通过getline来获取每一行的字符串的时候,getline默认去掉了"\n",却没有去掉"\r",因此,在字符串的末尾就剩下了"\r"。
而在操作系统中,"\r"的意思是,光标移到本行的行首处,所以在cout打印时,剩下的\r让光标回到了行首,而" "就覆盖了第一个字母"H"。