2014-12-20 34 views
-4

我试图从文件中逐行读取,但始终得到更奇怪的打印。 我得到很多印花,看起来像正方形分为4个小方块,在他们的0。从文件中逐行读取

这里是我的代码:
(我只读3线)
(如果我不写,如果(...)破;它打印的文件,是和犯规打印奇怪的符号)

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 
+1

你可以添加你正在阅读的文件的样本吗? – sherb

+0

更新了我的问题 – asdad

+0

你是否用0初始化字符串'ch'? strcat将追加在c字符串的末尾,即从第一个0开始。 – ElderBug

回答

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; 
    } 
}