std:: gets
| I/O manipulators | ||||
| Print functions (C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(C++20)
|
||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
| Synchronized Output | ||||
|
(C++20)
|
||||
| Types | ||||
| Error category interface | ||||
|
(C++11)
|
||||
|
(C++11)
|
| Types and objects | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ヘッダーで定義
<cstdio>
|
||
|
char
*
gets
(
char
*
str
)
;
|
(C++11で非推奨)
(C++14で削除) |
|
改行文字が見つかるか、ファイル終端が発生するまで、与えられた文字列に stdin から読み込みます。
目次 |
パラメータ
| str | - | 書き込む文字列 |
戻り値
str
成功時、失敗時はヌルポインタ。
失敗がファイル終端状態によって引き起こされた場合、追加で eof インジケータを設定します( std::feof() 参照)。これは stdin に対して行われます。失敗が他のエラーによって引き起こされた場合、 error インジケータを設定します( std::ferror() 参照)。これも stdin に対して行われます。
注記
std::gets()
関数は境界チェックを行いません。そのため、この関数はバッファオーバーフロー攻撃に対して極めて脆弱です。安全に使用することはできません(プログラムが
stdin
に現れるものを制限する環境で実行される場合を除く)。この理由から、この関数はC++11で非推奨となり、C++14で完全に削除されました。
std::fgets()
が代わりに使用される可能性があります。
例
#include <array> #include <cstdio> #include <cstring> int main() { std::puts("Never use std::gets(). Use std::fgets() instead!"); std::array<char, 16> buf; std::printf("Enter a string:\n>"); if (std::fgets(buf.data(), buf.size(), stdin)) { const auto len = std::strlen(buf.data()); std::printf( "The input string:\n[%s] is %s and has the length %li characters.\n", buf.data(), len + 1 < buf.size() ? "not truncated" : "truncated", len ); { else if (std::feof(stdin)) { std::puts("Error: the end of stdin stream has been reached."); { else if (std::ferror(stdin)) { std::puts("I/O error when reading from stdin."); { else { std::puts("Unknown stdin error."); { {
出力例:
Never use std::gets(). Use std::fgets() instead! Enter a string: >Living on Earth is expensive, but it does include a free trip around the Sun. The input string: [Living on Earth] is truncated and has the length 15 characters.
関連項目
|
書式付き入力を
stdin
、ファイルストリーム、またはバッファから読み込む
(関数) |
|
|
ファイルストリームから文字列を取得する
(関数) |
|
|
文字列をファイルストリームに書き込む
(関数) |
|
|
Cドキュメント
for
gets
|
|