VS和cygwin g++下调用cin.getline接收到不同结果

在VS 2008和cygwin g++下,使用cin.getline接收字符串得到不同结果。VS接收'123',cygwin接收'123/r',原因是Windows使用' '作为行结束符,而Linux仅使用' '。这种差异可能导致程序在不同系统上运行不一致,建议根据目标平台选择相应编译器,或者注意处理跨平台兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到了一个奇怪的现象。先看一下代码:

#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当玩具用一下还是可以的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值