今天遇到了一个奇怪的现象。先看一下代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
char str[128];
cin.getline(str,128);
string s(str);
cout<<"s size:"<<s.size()<<endl;
return 0;
}
如果输入"123",输出会是多少?
经测试,程序经VS 2008编译后会输出3,而cygwin 下的g++编译后会输出4
分别在不同的环境下调试,发现,VS2008接收到的字符串是"123",而cygwin g++接收到的字符串是"123/r"。
原来是因为Windows和Linux对回车的行为不同造成的。
Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回车>”,即“\n\r”。
(http://www.cnblogs.com/dartagnan/archive/2010/12/14/2003499.html)
在一个模拟linux环境上的编译器cygwin中,它认的回车符是\n,然而系统给出的是\n\r,难怪会认不出来\r也是回车的一部分,而把它当做新的字符了。
这件事告诉我们,在Windows下写程序,还是尽量用windows的编译器。要用gcc、g++这类linux编译器,还是最好在linux下进行,否则可能会因为操作系统的差异,造成程序运行结果的不一致,导致bug产生。当然,这个小程序就算了,就是OJ上的一个小题目而已...cygwin当玩具用一下还是可以的