C言語 標準入力(キーボード)からの入力を1行取得 - stdio.h - [ gets ]
2008.10.08 Wednesday | by LRESULT
標準入力(キーボード)からの入力を1行単位で取得するには、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文字以上ダラダラと入力してみてください。 変な文字が表示されたり、エラー吐いて止まったりすると思います。 |