首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >让fgetc在GNU/Linux下处理Mac

让fgetc在GNU/Linux下处理Mac
EN

Stack Overflow用户
提问于 2012-12-26 14:52:38
回答 2查看 228关注 0票数 1

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

代码语言:javascript
运行
复制
0,1,2,3\r
4,5,6,7\r
6,9,10,11\r

fgets函数将整个文件作为一行返回。如何指定fget应该以换行符的形式处理\r?

C代码示例:

代码语言:javascript
运行
复制
#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++;
        }
}

我想避免使用pass来转换\r => \n。

EN

回答 2

Stack Overflow用户

发布于 2012-12-26 15:00:11

如本页所述,可以使用getdelimnode/Line-Input.html

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

编辑:找出文件的结尾是什么行:

代码语言:javascript
运行
复制
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;
}

这就对了。

票数 2
EN

Stack Overflow用户

发布于 2012-12-26 14:56:54

在Linux和OSX上,您都可以调用getdelim,这允许您指定分隔符字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14042240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档