C言語 標準入力(キーボード)からの入力を1行取得 - stdio.h - [ gets ]

2008.10.08 Wednesday | by LRESULT


準入力(キーボード)からの入力を1行単位で取得するには、gets()を使います。


gets
書式 char *gets( char *s )
機能 標準入力(キーボード)からの入力を1行単位で取得
引数 char *s : 1行を取得する為のバッファ(配列)を指定
戻り値 成功すると、文字列を返し、
失敗すると、NULLを返します。


gets()で文字を受け取るには、文字列を入力した最後に改行(ENTERキー)を押します。
受け取る文字列の中に、改行文字は入りません。
また、文字列の最後に "¥0" が入る為、バッファサイズは「文字数 + 1」必要です。


よく言われていることですが、入力される文字数が分からない場合には、
  gets()の使用を控えたほうが良いです。

  文字列を受け取る為の配列(バッファ)サイズを超えた場合、
  バッファオーバーランエラーとなり、不具合の原因となる為、
  実戦では、あまり使われない関数だと思います。

  サイズを超えても正常に動いているように見える事もありますが、
  実際にはどこかのメモリを、ぶっ壊していたりするのです・・


gets
()の代わりとして使える関数は、fgets()となります。
fgets( buf, 256, stdin );
で、文字数制限のある、標準入力(キーボード)から入力された1行を取得出来ます。


参考 - ファイルポインタfp を stdin にするとキーボードから受け取れます。
C言語 テキストファイルの読み込み - stdio.h - [ fgetc, getc, fgets ]





サンプルコード
10文字以内の英数字をキーボードから入力し、入力された文字を表示します。
#include <stdio.h>

int main(void)
{
  char s[11];  /* 文字数 + 1 のサイズ */

  printf( "10文字以内で入力して下さい¥n" );
  printf( "ENTERキーで確定します¥n" );

  gets( s );
  printf( "受け取った文字列 : %s¥n", s );

  return 0;
}



結果
10文字以内で入力してください
ENTERキーで確定します
test
受け取った文字列 : test
と、表示されてると思います。

試したい方は、10文字以上ダラダラと入力してみてください。
変な文字が表示されたり、エラー吐いて止まったりすると思います。

カテゴリ:C言語 stdio.h | 21:45 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

http://simd.jugem.jp/trackback/67

トラックバック