fopen関数と、fprintf関数のセキュリティ強化版は、それぞれfopen_s, fprintf_s関数です。
いずれもVS2005以降でないと使えません。
errno_t fopen_s( FILE** pFile, const char *filename, const char *mode );pFileは、ファイルポインタへのポインタです。
filenameは、ファイル名です。
modeは、アクセス許可の種類で、fopen関数と同じです。
fopen関数ではファイルポインタは、戻り値として受け取っていましたが、新バージョンでは、ファイルポインタへのポインタで受け取る点が大きく異なっています。
関数が成功すると、0が返されます。失敗したときは、エラーコードが返されます。
int fprintf_s(
FILE *stream,
const char *format [,
argument ]...
);
これは、fprintf関数と同じですね。streamは、FILE構造体へのポインタです。
formatは、書式指定文字列です。
成功すると、書き込んだバイト数が返されます。失敗したときはマイナスの値が返されます。
では、サンプルを見てみましょう。
/* fopen01.c */
#include <stdio.h>
int main()
{
FILE *fp;
errno_t err;
int ret;
err = fopen_s(&fp, "test.txt", "w");
if (err != 0) {
return -1;
}
ret = fprintf_s(fp, "%s\n", "test!");
if (ret < 0) {
printf("書き込みエラーです\n");
} else {
printf("%dバイト書き込みました\n", ret);
}
fclose(fp);
return 0;
}
このプログラムを実行すると、test.txtというファイルが作成されます。その中味は「test!(改行)」となります。
すでに、test.txtファイルが存在するときは、上書きされます。
Update Feb/04/2008 By Y.Kumei