如何在C语言中读取并打印.txt文件中的CR与LF字符?
问题解答
为什么读不到CR字符?
Windows下用标准C库的fopen("filename.txt", "r")打开文件时,默认是文本模式,这个模式会自动把文件里的CRLF(\r\n,即ASCII 13+10)转换成单个LF(\n)。所以你用getc()读取时,CR已经被系统自动过滤掉了,自然找不到它的踪迹。
如何读取并打印CR字符?
要读取原始的CR字节,必须以二进制模式打开文件,也就是打开时用"rb"参数:
FILE *fp = fopen("your_file.txt", "rb"); if (fp == NULL) { // 处理文件打开失败逻辑 return 1; }
用二进制模式打开后,getc()就能读到原始的CR(ASCII 13)和LF(ASCII 10)字节了。
直接打印CR字符的话,终端只会将光标移到行首,看不到实际字符,建议转成ASCII码或标识性文本输出:
int c; while ((c = getc(fp)) != EOF) { if (c == '\r') { printf("[CR (ASCII 13)]"); } else if (c == '\n') { printf("[LF (ASCII 10)]\n"); } else { printf("%c", c); } }
Linux系统处理行尾的特点
Linux/Unix类系统确实只用单个LF(\n)作为行尾标识,不存在CR的冗余字节。不管以文本模式还是二进制模式打开文件,读到的都是原始的LF字节,文件大小和字符计数(换行符按单个字符计算)完全匹配,处理时不需要考虑行尾转换的额外逻辑,确实更简便。
内容的提问来源于stack exchange,提问作者Urban Županič
相关产品推荐
相关产品推荐

