_cgets
, _cgetws
コンソールから文字列を取得します。 これらの関数のセキュリティを強化したバージョンを使用できます。「_cgets_s
、_cgetws_s
」を参照してください。
重要
これらは古い関数です。 Visual Studio 2015 以降、これらは CRT で使用できません。 これらの関数のセキュリティを強化したバージョン _cgets_s および _cgetws_s は、引き続き使用できます。 これらの代替関数の詳細については、「_cgets_s
, _cgetws_s
」を参照してください。
重要
この API は、Windows ランタイムで実行するアプリケーションでは使用できません。 詳細については、「ユニバーサル Windows プラットフォーム アプリでサポートされていない CRT 関数」を参照してください。
構文
char *_cgets(
char *buffer
);
wchar_t *_cgetws(
wchar_t *buffer
);
template <size_t size>
char *_cgets(
char (&buffer)[size]
); // C++ only
template <size_t size>
wchar_t *_cgetws(
wchar_t (&buffer)[size]
); // C++ only
パラメーター
buffer
データの格納場所。
戻り値
_cgets
と _cgetws
は文字列の先頭である buffer[2]
へのポインターを返します。 buffer
がNULL
場合、これらの関数は、パラメーター検証で説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、これらは NULL
を返し、 errno
を EINVAL
に設定します。
解説
これらの関数は、コンソールから文字列を読み込み、 buffer
が指す位置に文字列とその長さを格納します。 buffer
パラメーターは文字配列へのポインターである必要があります。 配列の最初の要素 ( buffer[0]
) には、読み取る文字列の最大長 (文字数) を格納します。 配列には、文字列を保持するのに十分な要素、終端の null 文字 ('\0')、および 2 バイトの余分なバイトが含まれている必要があります。 関数は、文字をキャリッジ リターンとラインフィード (CR-LF) の組み合わせが現れるか、指定した文字数を読み取るまで文字を読み取ります。 文字列は buffer[2]
を先頭として格納されます。 関数が CR-LF を読み取ると、null 文字 ('\0') を格納します。 次に、関数は 2 番目の配列要素である buffer[1]
に文字列の実際の長さを格納します。
コンソール ウィンドウでは、 _cgets
または _cgetws
が呼び出されたときにはすべての編集キーがアクティブになっているため、F3 キーを押すと最後に入力したエントリが繰り返されます。
C++ では、これらの関数にテンプレートのオーバーロードがあります。このオーバーロードは、これらの関数に対応するセキュリティで保護された新しい関数を呼び出します。 詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン | _UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
---|---|---|---|
_cgetts |
_cgets |
_cgets |
_cgetws |
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
_cgets |
<conio.h> |
_cgetws |
<conio.h> または <wchar.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
// crt_cgets.c
// compile with: /c /W3
// This program creates a buffer and initializes
// the first byte to the size of the buffer. Next, the
// program accepts an input string using _cgets and displays
// the size and text of that string.
#include <conio.h>
#include <stdio.h>
#include <errno.h>
int main( void )
{
char buffer[83] = { 80 }; // Maximum characters in 1st byte
char *result;
printf( "Input line of text, followed by carriage return:\n");
// Input a line of text:
result = _cgets( buffer ); // C4996
// Note: _cgets is deprecated; consider using _cgets_s
if (!result)
{
printf( "An error occurred reading from the console:"
" error code %d\n", errno);
}
else
{
printf( "\nLine length = %d\nText = %s\n",
buffer[1], result );
}
}
A line of input.Input line of text, followed by carriage return:
Line Length = 16
Text = A line of input.