ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

N-netコミュのバッファの読み捨て

  • mixiチェック
  • このエントリーをはてなブックマークに追加
今会社の研修でC言語をやっているのですが、文字列を用意した配列以上に入力してしまうと、バッファに残ると聞いたんですが、そこで、バッファの中身をクリアしたい場合はどうやってやればいいんでしょうか?

コメント(4)

まず↓これ自体やってはだめです。
「文字列を用意した配列以上に入力してしまう」

例えば
char ch[3];
strcpy(ch, "abcd");

なので、残ったバッファをクリアしなければいけないということも発生しません。
Nakanishi氏の補足として、バッファオーバーランなる物もあります。

バッファオーバーランを起こすとスタック領域を書き換える等、処理に致命的な欠陥を引き起こす事になるので、対処が必要です。

さて、ここから具体的な説明になります。

よくある例を挙げますと、ユーザに入力させる等の処理で定義してある枠内に入り切らない、のような物が上げられます。
その場合の対処法(scanfを使用した場合)です。
http://ja.wikipedia.org/wiki/Scanf#.E3.83.90.E3.83.83.E3.83.95.E3.82.A1.E3.82.AA.E3.83.BC.E3.83.90.E3.83.BC.E3.83.A9.E3.83.B3

次に、getsを使用した場合の処理の例と対処法です。
getsは「200バイトの配列」が用意され、その中にEOF(終了文字)が無い場合に、オーバーした部分がバッファオーバーランを引き起こします。
これを解決するには下記のように

char buf[200];
fgets(buf, 200, stdin);

とする事により、バッファサイズに指定したサイズ(この例では200)以降の文字列はバッファに書き込まれない、という処理を行う事もできます。

バッファオーバーランの詳細はこちらで。
http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%83%B3


以上稚拙な説明ですが、参考になれば幸いです。
レスありがとうございます。

バッファを読み捨てることがどういうことかわかりました!!

またお世話になるかもしれませんが、そのときはまたよろしくお願いしますm__m

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

N-net 更新情報

N-netのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング