gets, gets_s
|
ヘッダーで定義
<stdio.h>
|
||
|
char
*
gets
(
char
*
str
)
;
|
(1) | (C11で削除) |
|
char
*
gets_s
(
char
*
str, rsize_t n
)
;
|
(2) | (C11以降) |
- n がゼロである場合;
- n が RSIZE_MAX より大きい場合;
- str がヌルポインタである場合;
- endline または eof が、バッファに n - 1 文字を格納した後に検出されない場合。
gets_s
は、
__STDC_LIB_EXT1__
が実装によって定義され、かつユーザーが
__STDC_WANT_LIB_EXT1__
を整数定数
1
に設定してから
<stdio.h>
をインクルードする場合にのみ利用可能であることが保証されます。
目次 |
パラメータ
| str | - | stdin から配列に書き込まれる文字配列 |
| n | - | str が指す配列に書き込むことができる最大文字数 |
戻り値
str 成功時は文字列ポインタ、失敗時はヌルポインタ。
失敗がファイル終端状態によって引き起こされた場合、追加で eof インジケータを設定します( feof() を参照)。これは stdin に対して行われます。失敗が他のエラーによって引き起こされた場合、 error インジケータを設定します( ferror() を参照)。これも stdin に対して行われます。
注記
gets()
関数は境界チェックを行わないため、この関数はバッファオーバーフロー攻撃に対して極めて脆弱です。安全に使用することはできません(
stdin
に現れる内容を制限する環境でプログラムが実行される場合を除く)。この理由から、この関数はC99標準の第3正誤表で非推奨となり、C11標準では完全に削除されました。
fgets()
および
gets_s()
が推奨される代替機能です。
警告: 絶対に
gets()
を使用しないでください
。
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- K.3.5.4.1 gets_s関数 (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- K.3.5.4.1 gets_s関数 (p: TBD)
- C11規格 (ISO/IEC 9899:2011):
-
- K.3.5.4.1 gets_s関数 (p: 602-603)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.19.7.7 gets関数 (p: 298)
- C89/C90規格 (ISO/IEC 9899:1990):
-
- 4.9.7.7 gets関数
関連項目
|
(C11)
(C11)
(C11)
|
フォーマットされた入力を
stdin
、ファイルストリーム、またはバッファから読み込む
(関数) |
|
ファイルストリームから文字列を取得する
(関数) |
|
|
文字列をファイルストリームに書き込む
(関数) |
|
|
(dynamic memory TR)
|
区切り文字/行末までストリームから自動的にサイズ変更されるバッファに読み込む
(関数) |
|
C++ documentation
for
gets
|
|