小编pho*_*nix的帖子

为什么 c 中的 fread() 会读取额外的“#newlines”字符?

当我尝试使用fread()将文件复制到字符串时,我从文件中获取了与新行数完全相同的额外字符。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#define LEN 5000000

int main()
{
   char *in = (char*) malloc(LEN);
   FILE *f=fopen("in.txt","r");
   fread(in,5000000,1,f);
   printf("%ld\n", ftell(f)); 
   in[ftell(f)]=0;
   int l;
   for(l=0;true;l++)
   {
      if(in[l]<10)
        break;
      printf("%d ",in[l]);
   }
   printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

该程序的输入是:

1  
2  
<newline>
Run Code Online (Sandbox Code Playgroud)

输入链接:https://paste.fedoraproject.org/388281/46780193/
对于输出,我正在打印读取的字符的 ASCII 值:

6  
49 10 50 10 13 10  
Run Code Online (Sandbox Code Playgroud)

如果输入是:

1  
2  
3  
<newline>  
Run Code Online (Sandbox Code Playgroud)

输入链接: https: //paste.fedoraproject.org/388280/
然后输出是:

9  
49 10 50 10 51 10 51 13 10  
Run Code Online (Sandbox Code Playgroud)

我看到了其他一些测试用例。在每个测试用例中,额外的字符数始终是新行数。
我有几个问题:
-为什么图案是这样的?
-这与 Windows 中新行占用 2 个字节的事实有何关系?
- 如何去掉那些多余的字符? …

c file-io fread

5
推荐指数
1
解决办法
6172
查看次数

标签 统计

c ×1

file-io ×1

fread ×1