K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>まず前回のコードにポカがあったので再掲します。ついでに色々いじりました。 > >> _baseがバッファの根元を押さえ、_cntが現在格納されているデータのサイズだと >>想像し(外しているかも)、こんなプログラムを書いてみました。 > >baseはおそらくバッファの根元を押さえているのでしょうが、バッファから >1文字消費されるたびに中身を移動させていくとは思えないので、 >おそらく環状バッファか何かになっていて、現在バッファリングされている >内容の先頭は_ptrが抑えているのでしょう。 >というわけで修正プログラムです。 > >#include <stdio.h> > >void dump_buffer(FILE *fp) >{ > int i; > printf("["); > for (i = 0; i < fp->_cnt; i++) { > if (fp->_ptr[i] == '\n') { > printf("<\\n>"); > } else { > putchar(fp->_ptr[i]); > } > } > printf("]\n"); >} > >int main(void) >{ > int c; > > for (;;) { > dump_buffer(stdin); > c = getchar(); > if (c == EOF) > break; > putchar(c); > } > > return 0; >} > >うちの環境での実行結果。 >C:\ctest>buffer >[] >abcdefg >a[bcdefg<\n>] >b[cdefg<\n>] >c[defg<\n>] >d[efg<\n>] >e[fg<\n>] >f[g<\n>] >g[<\n>] > >[] > >さて、 > >>> C:\ctest>buffertest >>> aaa >>これはエコーバックですよね。 > >そうです。 > >>> [aaa] >>これはdump_buffer関数でのputchar、printf出力ですね。 > >そうです。 > >>> a[aa] >>aが一回だけ入力されているのにこのようになるのですかね?? > >ここに誤解があります。ここで左端に出ている[]に入らないaは、 >エコーバックではなく、main()の中でputchar()されている文字です。 >つまり、手で「aaa」と入力すると、バッファから1文字ずつ消費しながら >putchar()している、という様子を示しているわけです。 > ># でも、前回のプログラムに「abc」と入れると、変な出方をするのでした(^^; >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!