unix与windows下的\r与\n
1、printf("-----");printf("\r");printf("-----");printf("\n");printf("-----");printf("\...
1、printf("-----");
printf("\r");
printf("-----");
printf("\n");
printf("-----");
printf("\r\n");
printf("-----");
打印后发现只打印了三行-----?
2、unix下没有\r,现在在unix下使用strcat(start, "\n");,然后用ue在windows下打开看到start此处是0D 0A,是说unix到windows后,自动添加了一个\r(oxoA)?
谢谢! 展开
printf("\r");
printf("-----");
printf("\n");
printf("-----");
printf("\r\n");
printf("-----");
打印后发现只打印了三行-----?
2、unix下没有\r,现在在unix下使用strcat(start, "\n");,然后用ue在windows下打开看到start此处是0D 0A,是说unix到windows后,自动添加了一个\r(oxoA)?
谢谢! 展开
2个回答
展开全部
1.只打印了三行是对的,我没调试,但我想结果应该是这样:
----------
-----
-----
这样分析:\r是回车,\n是换行,回车,故名思义,只是把光标移动到本行前,不会换行,换行就是换行了,
所以第一行,是前两次组起来,并且,前5个横杠是第二次打印出来的。
有时候\r\n和\n的显示效果是一样的。但对于有些显示就不同,我所知道的MFC里一个文本框控件,里面的打印,\r\n和\n就是不同的。
2.这是没有道理的,你所说的自动添加\r,如果可能也只能是软件本身(UE)显示的需要,二进制传输的话应该不会出现这种情况。
个人愚见。
补充一下:刚看到你说只打印了三行-----,那可能就是第二次打印因为也是从行首打,所以把第一次的覆盖了,没想到是printf默认是覆盖模式,不是插入模式,呵呵,我想应该是这样。你可以试下第二次打五个*****试试。
----------
-----
-----
这样分析:\r是回车,\n是换行,回车,故名思义,只是把光标移动到本行前,不会换行,换行就是换行了,
所以第一行,是前两次组起来,并且,前5个横杠是第二次打印出来的。
有时候\r\n和\n的显示效果是一样的。但对于有些显示就不同,我所知道的MFC里一个文本框控件,里面的打印,\r\n和\n就是不同的。
2.这是没有道理的,你所说的自动添加\r,如果可能也只能是软件本身(UE)显示的需要,二进制传输的话应该不会出现这种情况。
个人愚见。
补充一下:刚看到你说只打印了三行-----,那可能就是第二次打印因为也是从行首打,所以把第一次的覆盖了,没想到是printf默认是覆盖模式,不是插入模式,呵呵,我想应该是这样。你可以试下第二次打五个*****试试。
展开全部
其实这个是ANSI C易移植性的一个表现,各个操作系统的文本结束符是不一样的,MS-DOS用\r\n来表示行尾,有的操作系统用\r来表示行尾(如Macintosh)。C程序是使用\n来表示行尾的,但我们看到的是,不管你在什么操作系统上执行C程序,都可以正确的换行,那是因为在读取或者写入文件时它会自动的转换,比如读取时把\r\n转换成\n ,写入时又换回来。所以看下你的程序。
1。把\n换成行尾编码,可不是只有3行吗。
2。这个就不用说了再windows下面刚刚说了\r\n表示行尾,0D 0A的ASCII编码你查一下 0D →CR OA→LF
1。把\n换成行尾编码,可不是只有3行吗。
2。这个就不用说了再windows下面刚刚说了\r\n表示行尾,0D 0A的ASCII编码你查一下 0D →CR OA→LF
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |