1

次のコードを書きましたが、 read が期待どおりに文字を保存しない理由がわかりません。

char temp;
char buf[256];

    while(something)   
        read (in,&temp, 1);
        buf[strlen(buf)] = temp;
     }

temp読んでいるときに配列の最後の場所を印刷すると、buf一致しないことがあります。たとえば、文字が「d」であるが配列に含まれている%か、文字が0あり、配列に含まれている可能性があります.

256 文字未満しか読んでいませんが、読みながら印刷しているので問題ありません。

明らかな何かが欠けていますか?

4

2 に答える 2

2

はい、初期化していないbuf-strlen(buf)は未定義です。次のように初期化する必要があります。

buf[0] = 0;

また、画家のアルゴリズムであるShlemielstrlenを回避するために、各反復を呼び出すのではなく、長さを追跡することをお勧めします。

--の呼び出しでエラーをチェックする必要もありread(2)ます。-1または0が返された場合は、エラーが発生したか、ファイル/入力ストリームの最後に到達したことを意味するため、ループから抜け出す必要があります。

于 2012-07-12T20:16:29.243 に答える