gets、_getwsgets, _getws

stdin ストリームから行を取得します。Gets a line from the stdin stream. これらの関数のセキュリティを強化したバージョンを使用できます。「 gets_s, _getws_s」を参照してください。More secure versions of these functions are available; see gets_s, _getws_s.


これらは古い関数です。These functions are obsolete. Visual Studio 2015 以降では、CRT で使用できません。Beginning in Visual Studio 2015, they are not available in the CRT. これらの関数のセキュリティを強化したバージョン gets_s および _getws_s は、引き続き使用できます。The secure versions of these functions, gets_s and _getws_s, are still available. これらの代替関数の詳細については、「 gets_s, _getws_s」を参照してください。For information on these alternative functions, see gets_s, _getws_s.


この API は、Windows ランタイムで実行するアプリケーションでは使用できません。This API cannot be used in applications that execute in the Windows Runtime. 詳細については、「ユニバーサル Windows プラットフォーム アプリでサポートされていない CRT 関数」を参照してください。For more information, see CRT functions not supported in Universal Windows Platform apps.


char *gets(
   char *buffer
wchar_t *_getws(
   wchar_t *buffer
template <size_t size>
char *gets(
   char (&buffer)[size]
); // C++ only
template <size_t size>
wchar_t *_getws(
   wchar_t (&buffer)[size]
); // C++ only


入力文字列の格納場所。Storage location for input string.

戻り値Return Value

正常に終了した場合はその引数を返します。Returns its argument if successful. エラーが発生した場合またはファイルの終端に達した場合は、NULL ポインターを返します。A NULL pointer indicates an error or end-of-file condition. どちらが発生したかを確認するには、 ferror または feof を使用します。Use ferror or feof to determine which one has occurred. bufferNULL の場合は、「パラメーターの検証」で説明されているように、これらの関数は無効なパラメーター ハンドラーを呼び出します。If buffer is NULL, these functions invoke an invalid parameter handler, as described in Parameter Validation. 実行の継続が許可された場合、これらの関数は NULL を返し、errno を EINVALに設定します。If execution is allowed to continue, these functions return NULL and set errno to EINVAL.


gets 関数は、 stdin 標準入力ストリームから行を読み取り、 bufferに格納します。The gets function reads a line from the standard input stream stdin and stores it in buffer. 行は、最初の改行文字 ('\n') までのすべての文字 (改行文字を含む) で構成されます。The line consists of all characters up to and including the first newline character ('\n'). gets は、行を返す前に、改行文字を null 文字 ('\0') に置き換えます。gets then replaces the newline character with a null character ('\0') before returning the line. これとは対照的に、fgets 関数は改行文字を保持します。In contrast, the fgets function retains the newline character. ワイド文字を扱う場合は、_getws ではなく gets を使用します。引数にはワイド文字列を指定します。また戻り値もワイド文字列です。_getws is a wide-character version of gets; its argument and return value are wide-character strings.


gets で読み取る文字の数を制限する方法がないため、信頼できない入力によってバッファー オーバーランが発生しやすくなります。Because there is no way to limit the number of characters read by gets, untrusted input can easily cause buffer overruns. 代わりに fgets を使用してくださいUse fgets instead.

C++ では、これらの関数にテンプレートのオーバーロードがあります。このオーバーロードは、これらの関数に対応するセキュリティで保護された新しい関数を呼び出します。In C++, these functions have template overloads that invoke the newer, secure counterparts of these functions. 詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。For more information, see Secure Template Overloads.

既定では、この関数のグローバル状態はアプリケーションにスコープが設定されています。By default, this function's global state is scoped to the application. これを変更するには、「 CRT でのグローバル状態」を参照してください。To change this, see Global state in the CRT.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_getts gets gets _getws


ルーチンRoutine 必須ヘッダーRequired header
gets <stdio.h><stdio.h>
_getws <stdio.h> または <wchar.h><stdio.h> or <wchar.h>

互換性の詳細については、「互換性」を参照してください。For additional compatibility information, see Compatibility.


// crt_gets.c
// compile with: /WX /W3

#include <stdio.h>

int main( void )
   char line[21]; // room for 20 chars + '\0'
   gets( line );  // C4996
   // Danger: No way to limit input to 20 chars.
   // Consider using gets_s instead.
   printf( "The line entered was: %s\n", line );

入力が 20 文字を超えると、行バッファーのオーバーランが発生し、ほぼ確実にプログラムがクラッシュします。Note that input longer than 20 characters will overrun the line buffer and almost certainly cause the program to crash.

Hello there!The line entered was: Hello there!

関連項目See also

ストリーム入出力Stream I/O
fgets、fgetwsfgets, fgetws
fputs、fputwsfputs, fputws
puts、_putwsputs, _putws