第138章 _cgets関数のセキュリティ強化版


_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バイト文字が出てきたら、それ以降無視されていますね。




[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Sep/09/2007 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。