我试图从文件中逐行读取,但一直打印得很奇怪。 我得到了很多看起来像正方形的照片,分成了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
答案 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 ++。