gpt4 book ai didi

c - 如何针对 linux 换行符\r\n 字符处理任何文本文件中的换行符 '\n'?

转载 作者:太空宇宙 更新时间:2023-11-04 02:16:44 25 4
gpt4 key购买 nike

我有一个 C 代码,它一次读取 1 行,从一个以文本模式打开的文件中使用

fgets(buf,200,fin); 

fgets() 从中读取行的输入文件是程序的命令行参数。

现在 fgets 将字符串中包含的换行符复制到 buf。

在某处做我检查的代码中的行

length = strlen(buf);

对于一些我猜是在 *nix 环境中编辑的输入文件,换行符只是 '\n'

但对于其他一些测试用例输入文件(我猜是在 Windows 环境下编辑/创建的)有 2 个字符表示换行符 - '\r''\n'

我想删除换行符并想把一个'\0'作为字符串终止符。所以我要么做-

    if(len == (N+1))
{
if(buf[length-1] == '\n')
{
buf[length-2] = '\0'; //for a `\r\n` newline
}
}

if(len == (N))
{
if(buf[length-1] == '\n')
{
buf[length-1] = '\0'; //for a `\n` newline
}
}

由于文本文件作为命令行参数传递给程序,我无法控制它的编辑/组合方式,因此无法使用某些工具过滤它以使换行一致。

我该如何处理这种情况?

标准 C 库(无扩展)中是否有任何 fgets 等效函数可以处理这些不一致的换行符并返回没有它们的字符串?

最佳答案

我喜欢同时更新length

if (buf[length - 1] == '\n') buf[--length] = 0;
if (buf[length - 1] == '\r') buf[--length] = 0;

或者,删除所有尾随空格

/* remember to #include <ctype.h> */
while ((length > 0) && isspace((unsigned char)buf[length - 1])) {
buf[--length] = 0;
}

关于c - 如何针对 linux 换行符\r\n 字符处理任何文本文件中的换行符 '\n'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6691224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com