【踩坑日记】因不同系统换行符不同导致的文本读取结果不同的问题

文章目录

  • 1 问题现象描述
  • 2 解决过程(点击直接跳到解决方法)
  • 3 原因解释
  • 4 如何避免踩坑
    • 4.1 格式转换
    • 4.2 格式查看

1 问题现象描述

起因是群友问了这么一个问题
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
确实很奇怪,按理说第二个printf不会完全不输出,于是想到,会不会是printf缓冲器的锅,让群友尝试刷新缓冲区,无果

2 解决过程(点击直接跳到解决方法)

于是我将代码克隆到本地的win环境运行,却发现输出正常:
在这里插入图片描述
这就很奇怪了,我的环境运行正常,而群友运行就不正常,开始怀疑是不是其环境的问题

此时,注意到其用的是 WSL 的 Ubuntu 环境,于是我尝试在我的 WSL 的 Ubuntu 环境下运行,结果问题真的复现了!

3 原因解释

丢给gpt进行解释,原来我们忽略了一个重要的问题:不同系统的回车换行符是不同的

系统换行符
Windows\r\n
UNIX、Linux\n
macOS\r

Linux会将连一起的\r\n解释会回车换行,\n也会解释为回车换行,但是如果\r不和\n一起出现,\r将被解释为回车符,也就是光标回到当前这个 printf 输出的内容的开始,如果后面继续输出,将会覆盖当前这个 printf 输出的内容。

  • 如图,\r\n被linux解释为回车换行:
    在这里插入图片描述
  • 单独的\n也被 linux 解释为回车换行
    在这里插入图片描述
  • 而单独的\r被 linux 解释为回车,输出 bb 后,由于光标回到了第一个 b,下次输出的 c 直接覆盖了第一个 b
    在这里插入图片描述

4 如何避免踩坑

在处理文本文件时,应确保文件格式符合当前系统的要求。

4.1 格式转换

  • 如果在 Linux 中,可以使用命令行命令对文件进行格式转换:
# 将UNIX / Linux格式的文件转换为DOS格式
unix2dos 文件名# 将DOS格式的文件转换为UNIX / Linux格式
dos2unix 文件名

4.2 格式查看

cat -A 文件名
  • aaaa^M$ 表示文件中存在以下内容:
    • aaaa 是4个 ‘a’ 字符
    • ^M 表示一个 Windows 风格的回车符 (Carriage Return)
    • $ 表示一个 Unix 风格的换行符 (Newline)

这说明该文件使用了 Windows 风格的换行符,而不是 Unix/Linux 的换行符 (\n)。为了在 Unix/Linux 系统上正确显示该文件,需要使用 dos2unix 命令将其转换为 Unix 格式。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/595940.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP挥手中TIME_WAIT存在的原因

四次挥手的一般过程如图所示: 在客户端收到FIN结束报文的时候不是立刻进入CLOSED状态,而是进入TIME_WAIT状态,一般等2MLS后进入关闭状态。 原因: 1.可靠地终止 TCP 连接。 2.保证让迟来的 TCP报文段有足够的时间被识别并丢弃。 …

递归|全排列

全排列一 题目描述 算法原理 我们先把决策树画出来,根据决策树写代码,然后设计函数头 dfs函数用途就是从nums数组选数填入横线 就是有三个位置,我们把1 2 3填进这三个位置,而且保证不重复。 比如我们第一冷选了1之后第二轮就不…

Redis(性能管理、主从复制、哨兵模式)概述及部署

目录 一、性能管理 1、查看Redis内存使用 2、内存碎片率 3、跟踪内存碎片率 4、内存使用率 5、内回收key 二、Redis集群有三种模式 三、Redis主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、搭建Redis主从复制 1.环境准备 2.安装Redis&#…

【学习分享】小白写算法之选择排序篇

【学习分享】小白写算法之选择排序篇 前言一、什么是选择排序算法二、选择排序算法如何实现三、C语言实现算法四、复杂度计算五、算法稳定性六、小结 前言 简单排序有三种,冒泡排序,插入排序和选择排序。这三种排序的算法算是入门级别的,打好…

联想 Y9000P 连接网线速度慢 的 问题解决

参考帖子:求助,拯救者Y9000P 2022 i73060版本 有线网非常慢 无线网正常【笔记本吧】_百度贴吧 问题原因: 网卡驱动版本不对。不能用Win11版,要用Win10版。 问题解决: 1、卸载原驱动 2、下载Win10 驱动 并安装 下载…

JavaEE 初阶篇-生产者与消费者模型(线程通信)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 生产者与消费者模型概述 2.0 在生产者与消费者模型中涉及的关键概念 2.1 缓冲区 2.2 生产者 2.3 消费者 2.4 同步机制 2.5 线程间通信 3.0 实现生产者与消费者模…

SpringBoot+ECharts+Html 字符云/词云案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 2. 准备条件 在mysql中创建数据库echartsdb,数据库中创建表t_comment表,表中设置两个字段word与count,添加表中的数据。如:附件中的 echartsdb.sql 3. SpringBoot…

如何选择和注册域名,域名有什么作用,什么是域名解析?域名的需要多少钱?

大家好欢迎来到易极赞,今天我们来跟大家聊一下“如何选择和注册域名”这个话题。 域名用来做什么? 域名对您的网站至关重要,因为它代表您的品牌名称并充当网站的地址。对于企业主来说,一个令人难忘的域名有助于建立在线形象和客户…

使用神经网络-遗传算法优化神经网络-风电预测故障(BP,GABP,matlab)

本项目是故障预测,不是时序预测,本质还是分类问题 1 数据集介绍 特征文件: 标签文件:共计4个标签,其中大多数都是正常的,其他是3个不正常的类别 2 使用BP网络 2.1 读取数据,然后选择几个…

git可视化工具

Gitkraken GitKraken 是一款专门用于管理和协作Git仓库的图形化界面工具。它拥有友好直观的界面,使得Git的操作变得更加简单易用,尤其适合那些不熟悉Git命令行的开发者。GitKraken提供了丰富的功能,如代码审查、分支管理、仓库克隆、提交、推…

【精品教程】护网HVV实战教程资料合集(持续更新,共20节)

以下是资料目录,如需下载,请前往星球获取: 01-HW介绍.zip 02-HTTP&Burp课程资料.zip 03-信息收集_3.zip 04-SQL注入漏洞_2.zip 05-命令执行漏洞.zip 06-XSS漏洞.zip 07-CSRF.zip 08-中间件漏洞.zip 09-SSRF.zip 10-XXE.zip 11-Java反序列…

【PyQt5篇】多线程

文章目录 &#x1f354;使用QtDesigner进行设计&#x1f6f8;实现多线程&#x1f339;效果&#x1f50e;原因 &#x1f354;使用QtDesigner进行设计 对应的代码btn.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0">&l…