2017-02-08 8 views
2

私はstdinから読み込み、入力をファイルに出力しようとしていましたが、入力が終了したらプログラムを停止します。しかし、これはうまくいかないようですが、if節は "quit"とタイプすると起動しません。このコードで何が問題になっていますか?文字列の比較、システムコールの読み取り

while((n_char = read(0, (void *)buffer, 10)) != 0){ 
    if (strcmp(buffer, "quit") == 0){ 
     printf("equal\n"); 
     exit(0); 
    } 
//Display the characters read 
    n_char = write(inFile, buffer,n_char); 
} 
+0

実例を示してください。 –

答えて

1

read()bufferにヌルバイト終端を追加しません。しかし、strcmp()は、引数がnullバイトで終了することを期待しています。

strcmp()前にNULLバイトを追加します。

buffer[n_char] = 0; 

n_charが10であれば、あなたはbuffer[n_char]バウンドアクセスの外にはなりません。つまりためbufferに少なくとも1つの余分バイトを持っていることを確認する必要があります一方、strncmp() `)を使用することができます。

また、条件が間違っています。 read()あなたの状態に合格するエラーで-1を返すことができます。私はvoid *にunnessaryキャストを削除

while((n_char = read(0, buffer, 10)) > 0) { 

お知らせ:に変更します。

+0

Cスタイルの文字列に対してのみ 'str *'関数を使うべきです。これらの関数のそれぞれのドキュメントは、入力が文字列でなければならず、ファイルやネットワーク接続から読み取られたデータの任意のまとまりではないことを明確に示しています。 –

+0

バッファ[n_char] = 0で解決できませんでした。 –

+0

@InnoveerHipstirt入力の読み込みに改行があります。 –