-1

編集: DanielFischer は、誰かが興味を持っている場合に備えて、以下のコードの問題を指摘しました。

ユーザーが書式設定された文字列を入力して Enter キーを押すと、それを読み取るプログラムに正確に何が送信されますか?

Enter name> John Smith

これはnullで終了する文字列のみを送信しますか、それともEnterキーを押すことを意味する文字がありますか?

編集:マイクの言うことは真実だと思っていました。では、なぜこのコード スニペットが機能しないのでしょうか?

printf( "Enter command> " );
memset( buf, 0, BUFSIZ );
do{
    temp = getchar();
    if{ temp != '\n' ) strcat( buf, &temp );
}while( temp != '\n' );
strcat( buf, "\0" );
4

1 に答える 1

3

端末に送信されるのは 10 文字です。

[J][o][h][n][ ][S][m][i][t][h][\n]

プログラムがそれを処理する方法は、入力の読み取りに使用されている関数によって異なります。そこの最後の文字 ( '\n') は、「Enter」を押したことを示しています。

ヌル終了文字列はプログラム内部の概念です (つまり、文字列関数が正しく動作するためにはそれが必要でした)。例では NULL ターミネータは表示されませんstdin

これが、ユーザーからデータを受け取る関数がどのように機能するかを理解する必要がある理由です。改行文字を使用する場合は、それを削除する必要がある場合があります。null ターミネータが自動的に追加されない場合は、おそらく追加する必要があります。

于 2013-06-20T19:36:29.883 に答える