从文件中逐行读取

时间:2014-12-20 18:24:27

标签: c linux readfile

我试图从文件中逐行读取,但一直打印得很奇怪。 我得到了很多看起来像正方形的照片,分成了4个正方形,其中有0个。

这是我的代码:
(我只读了3行)
(如果我不写if(...)中断;它按原样打印文件并且不打印奇怪的符号)

while(i<3)    
    {   
        while(read(fdin,buff,1)>0 )    
        {    
            if (strcmp(buff,"\n")==0)    
                break;      
            strcat(ch,buff);   
        }    
        printf("%s\n","********");   
        printf("%s\n",ch);    
        memset(ch,NULL,100);    
        i++;    
    }

我读过的文件:(我读过路径)

/home/user/Desktop/dir1
/home/user/Desktop/dir2
/home/user/Desktop/dir3

2 个答案:

答案 0 :(得分:1)

由于您一次只读一个字符(效率不高,因为每个read都是系统调用),请尝试使用此代码,它不使用任何C字符串操作,只是随时检查角色,并在生成的线条中随之构建。

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

char s[100], * p = s, * e = s + 100;

for (;;)
{
    if (p == e)
    {
        /* overflow */
        fprintf(stderr, "Input line too long.\n";)
        abort();
    }

    errno = 0
    n = read(fdin, p, 1);

    if (n == 0 || *p == '\n')
    {
        *p = '\0';
        printf("Line: '%s'\n", s);

        // or: fwrite(s, 1, p - s, stdout)

        if (n == 0)
        {
            /* end of file */
            break;
        }
        else
        {
            /* reset, next line */
            p = s;
        }
    }
    else if (n < 0)
    {
        printf("Error: %s\n", strerror(errno));
        abort();
    }
    else
    {
        ++p;
    }
}

答案 1 :(得分:0)

听起来像character encoding的问题。也许Reading text files of unknown encoding in C++可以提供帮助,尽管它适用于C ++。