雖然我試圖使用fread()將文件複製到字符串中,但我從文件中獲得了與新行數完全相同的額外字符。 這裏是我的代碼:爲什麼fread()在c中讀取額外的'#newlines'字符?
#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");
}
輸入此程序是:
1
2
<newline>
鏈接,輸入:https://paste.fedoraproject.org/388281/46780193/
對於輸出我正在打印字符的ASCII值改爲:
6
49 10 50 10 13 10
如果輸入是:
1
2
3
<newline>
鏈接,輸入:https://paste.fedoraproject.org/388280/
則輸出爲:人物
9
49 10 50 10 51 10 51 13 10
我看到一些其他的測試cases.In每個測試用例額外數量總是新的行數。我有幾個問題:
- 爲什麼模式是這樣的?
- 這是怎麼回事,新行佔用2個字節的窗口?
- 如何擺脫這些額外的字符?
我搜索了類似的問題,但沒有找到答案。請解釋一下?
爲什麼?因爲這正是文件中的內容。換行符('\ n')需要在那裏表示一個*新行*。有很多方法可以擺脫換行符。最好的方法取決於你想要達到的目標。請參閱例如[從fgets()輸入]中刪除尾隨換行符(請參見http://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input) – kaylum
請顯示文件的確切內容。 – 2501
另外,爲什麼不使用'LEN',而是專門定義的,而不是在'fread()'調用中輸入數字? – Magisch