gpt4 book ai didi

c - GNU/Linux下获取fgetc处理Mac OS CR

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:51 24 4
gpt4 key购买 nike

在 GNU/Linux 下,使用以下文件 'foo.csv'(当然 \r 是 Mac 回车):

0,1,2,3\r
4,5,6,7\r
6,9,10,11\r

fgets 函数将整个文件作为一行返回。我如何指定 fgets 应将\r 处理为换行符?

C代码示例:

#include <stdio.h>

int main(int argc, char **argv) {
FILE *stream = fopen(argv[1],"r");
char tmp[1024];
int i=0;
while (fgets (tmp, 1024, stream) != NULL) {
printf("line %d\n", i);
i++;
}
}

我想避免转换 \r => \n

最佳答案

可以按照本页所述使用 getdelim: http://www.gnu.org/software/libc/manual/html_node/Line-Input.html

请注意 getdelim(和 getline)与 fgets 的工作方式不同,因此您需要稍微更改一下代码 - 特别是,您需要从char *ptr = NULLsize = 0;然后将它们作为 getdelim(&ptr, &size, '\r', stream); 传递 - 当您读完整个文件后,调用 free(ptr);

编辑:找出文件结尾的行:

int lineending(FILE *f)
{
int ch;
long fpos = ftell(f);
while((ch = fgetc(f)) != EOF)
if (ch == '\r' || ch == '\n')
break;
fseek(f, fpos, CUR_BEGIN);
return ch;
}

给你。

关于c - GNU/Linux下获取fgetc处理Mac OS CR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14042240/

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