2017-03-27 8 views
1
int *ptr = malloc~ 
while (fscanf(fp, "%d", ptr++) != EOF) 
    ; 

ptrに十分なメモリが割り当てられていると仮定すると、 * ptrに格納されている値は、関数がEOFをエンコードするときに何を表しますか? Visual Studioでデバッグツールを使用してみましたが、* ptrの値が-33686019であることがわかりました このガベージ値ですか?またはEOF?scanf(fscanf)がEOFに遭遇したときに、引数変数に格納される値は何ですか?

+0

未初期化値はガベージ値です。また、最初のアドレスを保存する必要があります。 – BLUEPIXY

+1

未指定。 **最初の**入力引数が割り当てられる前にエラーが発生した場合のみ、EOFが返されます。 – StoryTeller

+1

たとえば、ファイルの最初の文字が数字でなかった場合、なぜ['scanf'(またはその兄弟)(http://en.cppreference.com/w/c/io/fscanf))ストア*何か*? 'EOF'(またはゼロ!)を受け取った場合、有効な値が格納されていると仮定できません。 –

答えて

3

scanfがEOFに遭遇したとき、の値が格納されないは、アドレスptrを指します。 同様に、0を返す場合もあります。これは、入力を反復処理する標準的な方法でscanfの戻り値を確認する必要があるためです。

if (fscanf(fp, "%d", &ptr_to_int) == 1) { 
    /* successful conversion */ 
} 
else { 
    /* Unsuccesful conversion or EOF; use feof() to test which. */ 
} 
関連する問題