_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バイト文字が出てきたら、それ以降無視されていますね。
Update Sep/09/2007 By Y.Kumei