_cgets、_cgetws
コンソールから文字列を取得します。これらの関数のセキュリティを強化したバージョンについては、「_cgets_s、_cgetws_s」を参照してください。
重要 |
---|
この API は、Windows のランタイムで実行するアプリケーションで使用することはできません。詳細については、でサポート /ZW 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の場合、これらの関数は パラメーターの検証に説明されているように、無効なパラメーター ハンドラーが実行されます。実行の継続が許可された場合、これらは EINVALに NULL と同様に errno を返します。
解説
これらの関数は、コンソールから文字列を読み込み、bufferが指す位置にある文字列と長さを格納します。buffer のパラメーターを文字配列へのポインターである必要があります。buffer[0]、配列の最初の要素は、読み取る文字列の最大長 (文字数) を指定する必要があります。配列には、文字列、終端の NULL 文字 ( "" ) \0、および 2 の追加のバイトを保持するために十分な要素を含める必要があります。関数は、文字をキャリッジ return–line フィード (CR-LF) の組み合わせや、指定した数が読み取られるまで文字を読み取ります。文字列は buffer[2]に格納されている起動です。関数が CR-LF を行う場合は、null 文字 ( "" ) \0 を格納します。関数は、2 番目の配列要素、buffer[1]で、文字列の実際の長さを格納します。
_cgets またはF3 キーを押す_cgetws がコンソール ウィンドウ間で、繰り返す最後に入力したエントリを呼び出すときに、すべての編集のキーがアクティブになります。
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 );
}
}