_cgets、_cgetws
更新 : 2007 年 11 月
コンソールから文字列を取得します。これらの関数のセキュリティを強化したバージョンについては、「_cgets_s、_cgetws_s」を参照してください。
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 パラメータには、文字配列へのポインタを指定する必要があります。配列の 1 番目の要素 buffer[0] には、読み取る文字列の最大長を文字数単位で指定します。配列には、文字列、終端の null 文字 (\0)、および 2 バイト分を要素として持つ必要があります。文字の読み取りは、キャリッジ リターンとライン フィード (CR-LF: carriage return–line feed) の組み合わせ、または指定された文字数を読み取ったところで終了します。文字列は buffer[2] 以降に格納されます。読み取られた CR-LF は、NULL 文字 ('\0') として格納されます。2 番目の配列要素 buffer[1] には、文字列の実際の長さが格納されます。
_cgets または _cgetws がコンソール ウィンドウで呼び出されている場合はすべての編集キーがアクティブなので、F3 キーを押すと、最後に入力されたエントリが繰り返されます。
C++ では、これらの関数にテンプレートのオーバーロードがあります。このオーバーロードは、これらの関数に対応するセキュリティで保護された新しい関数を呼び出します。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_cgetts |
_cgets |
_cgets |
_cgetws |
必要条件
ルーチン |
必須ヘッダー |
---|---|
_cgets |
<conio.h> |
_cgetws |
<conio.h> または <wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// 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.