 _cgets関数は、コンソールから文字列を読み取りますが、これのセキュリティ強化版が_cgets_s関数です。
_cgets関数は、コンソールから文字列を読み取りますが、これのセキュリティ強化版が_cgets_s関数です。
VS2005以降でないと使用できません。
errno_t _cgets_s( char *buffer, size_t sizeInBytes, size_t *pSizeRead );bufferは、読み取った文字列を格納するバッファです。
sizeInBytesは、バッファのサイズです。
pSizeReadは、実際に読み取られた最大文字数です。
この関数を使うと、ユーザーが不用意に大量の入力を行っても安全です。
また、2バイト文字は読み込みません。
では、簡単なサンプルをみてみましょう。
/* cgets01.c */
#include <stdio.h>
#include <conio.h>
int main()
{
	char szBuf[32];
	size_t read;
	printf("何か入力してください-- ");
	_cgets_s(szBuf, sizeof(szBuf), &read);
	printf("入力された文字列は---%sで、読み取ったバイト数は%dバイト\n", szBuf, read);
	return 0;
}
では、動作を確認してみましょう。
 
こんどは、わざとに長い文字列を入力してみます。
 バッファあふれを起こさずに済んでいますね。
バッファあふれを起こさずに済んでいますね。
こんどは、2バイト文字を入力してみます。
 2バイト文字が出てきたら、それ以降無視されていますね。
2バイト文字が出てきたら、それ以降無視されていますね。
Update Sep/09/2007 By Y.Kumei