_cscanf_s、_cscanf_s_l、_cwscanf_s、_cwscanf_s_l
更新 : 2007 年 11 月
書式付きデータをコンソールから読み取ります。これらの関数は、「CRT のセキュリティ強化」に説明されているように、_cscanf、_cscanf_l、_cwscanf、_cwscanf_l のセキュリティが強化されたバージョンです。
int _cscanf_s(
const char *format [,
argument] ...
);
int _cscanf_s_l(
const char *format,
locale_t locale [,
argument] ...
);
int _cwscanf_s(
const wchar_t *format [,
argument] ...
);
int _cwscanf_s_l(
const wchar_t *format,
locale_t locale [,
argument] ...
);
パラメータ
format
書式指定文字列。argument
省略可能なパラメータ。locale
使用するロケール。
戻り値
正しく変換および代入されたフィールドの数を返します。戻り値には、読み取られても代入されなかったフィールドの数は含まれません。ファイルの終端に達した場合の戻り値は EOF です。これは、キーボード入力がオペレーティング システムのコマンド ライン レベルでリダイレクトされるときに発生します。戻り値が 0 の場合は、フィールドが代入されなかったことを意味します。
これらの関数では、パラメータの検証が行われます。format が null ポインタの場合、「パラメータの検証」に説明されているように、これらの関数は無効なパラメータ ハンドラを呼び出します。実行の継続が許可された場合、これらの関数は EOF を返し、errno が EINVAL に設定されます。
解説
_cscanf_s 関数は、argument で指定された位置に、コンソールからデータを直接読み取ります。文字の読み取りには、_getche 関数が使用されます。省略可能なパラメータには、format で指定した型指定子に対応する型を持つ変数へのポインタをそれぞれ指定する必要があります。format は、入力フィールドの解釈を制御し、scanf_s 関数のパラメータ format と同じ形式と機能を持ちます。通常、_cscanf_s は入力文字をエコーしますが、直前の呼び出しが _ungetch であった場合はエコーしません。
scanf 系関数の他のセキュリティが強化されているバージョンと同様に、_cscanf_s と _cswscanf_s では、型フィールドの文字 c、C、s、S、および [ を使用する場合、サイズの引数が必要です。詳細については、「scanf 関数の文字幅指定」を参照してください。
メモ : |
---|
サイズ パラメータは size_t 型ではなく、unsigned 型です。 |
_l サフィックスが付いているこれらの関数の各バージョンは、現在のスレッド ロケールの代わりに渡されたロケール パラメータを使用する点を除いて同じです。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tcscanf_s |
_cscanf_s |
_cscanf_s |
_cwscanf_s |
_tcscanf_s_l |
_cscanf_s_l |
_cscanf_s_l |
_cwscanf_s_l |
必要条件
ルーチン |
必須ヘッダー |
---|---|
_cscanf_s, _cscanf_s_l |
<conio.h> |
_cwscanf_s, _cwscanf_s_l |
<conio.h> または <wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
ライブラリ
C ランタイム ライブラリのすべてのバージョン。
使用例
// crt_cscanf_s.c
// compile with: /c
/* This program prompts for a string
* and uses _cscanf_s to read in the response.
* Then _cscanf_s returns the number of items
* matched, and the program displays that number.
*/
#include <stdio.h>
#include <conio.h>
int main( void )
{
int result, n[3];
int i;
result = _cscanf_s( "%i %i %i", &n[0], &n[1], &n[2] );
_cprintf_s( "\r\nYou entered " );
for( i=0; i<result; i++ )
_cprintf_s( "%i ", n[i] );
_cprintf_s( "\r\n" );
}
入力
1 2 3
出力
You entered 1 2 3
参照
参照
_cprintf、_cprintf_l、_cwprintf、_cwprintf_l
fscanf_s、_fscanf_s_l、fwscanf_s、_fwscanf_s_l