gets_s、_getws_sgets_s, _getws_s

Stdinストリームから行を取得します。Gets a line from the stdin stream. これらの gets および _getws のバージョンは、「Security Features in the CRT」(CRT のセキュリティ機能) で説明されているように、セキュリティが強化されています。These versions of gets, _getws have security enhancements, as described in Security Features in the CRT.

構文Syntax

char *gets_s(
   char *buffer,
   size_t sizeInCharacters
);
wchar_t *_getws_s(
   wchar_t *buffer,
   size_t sizeInCharacters
);
template <size_t size>
char *gets_s( char (&buffer)[size] ); // C++ only

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

パラメーターParameters

バッファーbuffer
入力文字列の格納場所。Storage location for input string.

sizeInCharacterssizeInCharacters
バッファーのサイズ。The size of the buffer.

戻り値Return Value

成功した場合は、バッファーを返します。Returns buffer 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.

RemarksRemarks

Gets_s関数は、標準入力ストリームstdinから行を読み取り、バッファーに格納します。The gets_s 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_sは改行文字を null 文字 (' \ 0 ') に置換してから、行を返します。gets_s then replaces the newline character with a null character ('\0') before returning the line. これに対し、 fgets_s関数は改行文字を保持します。In contrast, the fgets_s function retains the newline character.

最初に読み取られた文字がファイルの終端文字である場合は、null 文字がバッファーの先頭に格納され、 nullが返されます。If the first character read is the end-of-file character, a null character is stored at the beginning of buffer and NULL is returned.

_getws_sは、 gets_sのワイド文字バージョンです。引数と戻り値はワイド文字列です。_getws_s is a wide-character version of gets_s; its argument and return value are wide-character strings.

BufferNULLであるか、 sizeincharactersが0以下の場合、またはバッファーが小さすぎて入力行と NULL ターミネータを含むことがない場合、「パラメーター」に説明されているように、これらの関数は無効なパラメーターハンドラーを呼び出します。 検証If buffer is NULL or sizeInCharacters is less than or equal to zero, or if the buffer is too small to contain the input line and null terminator, these functions invoke an invalid parameter handler, as described in Parameter Validation. 実行の継続が許可された場合、これらの関数はNULLを返し、Errno をERANGEに設定します。If execution is allowed to continue, these functions return NULL and set errno to ERANGE.

C++ では、これらの関数の使用はテンプレートのオーバーロードによって簡素化されます。オーバーロードでは、バッファー長を自動的に推論できる (サイズの引数を指定する必要がなくなる) だけでなく、古くてセキュリティが万全ではない関数を新しく安全な関数に自動的に置き換えることができます。In C++, using these functions is simplified by template overloads; the overloads can infer buffer length automatically (eliminating the need to specify a size argument) and they can automatically replace older, non-secure functions with their newer, secure counterparts. 詳細については、「 Secure Template Overloads」を参照してください。For more information, see Secure Template Overloads.

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

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

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
gets_sgets_s <stdio.h><stdio.h>
_getws_s_getws_s <stdio.h> または <wchar.h><stdio.h> or <wchar.h>

コンソールは、ユニバーサル Windows プラットフォーム (UWP) アプリではサポートされていません。The console is not supported in Universal Windows Platform (UWP) apps. コンソール、 stdinstdout、およびstderrに関連付けられている標準ストリームハンドルは、C ランタイム関数が UWP アプリで使用できるようになる前にリダイレクトする必要があります。The standard stream handles that are associated with the console, stdin, stdout, and stderr, must be redirected before C run-time functions can use them in UWP apps. 互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// crt_gets_s.c
// This program retrieves a string from the stdin and
// prints the same string to the console.

#include <stdio.h>

int main( void )
{
   char line[21]; // room for 20 chars + '\0'
   gets_s( line, 20 );
   printf( "The line entered was: %s\n", line );
}
Hello there!
The line entered was: Hello there!

関連項目See also

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