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
入力の場合:
0入力用リンク: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
また、 'fread()'呼び出しで数値を入力するのではなく、特に定義した 'LEN'を使っていないのはなぜですか? – Magisch