当我尝试使用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 个字节的事实有何关系?
- 如何去掉那些多余的字符? …