_makepath関数は、ドライブ名、ディレクトリパス、ファイル名、拡張子から絶対パスを作成する関数ですが、これのセキュリティ強化バージョンが_makepath_s関数です。
VS2005以降でないと使用できません。
stdlib.hをインクルードする必要があります。
errno_t _makepath_s( char *path, size_t sizeInCharacters, const char *drive, const char *dir, const char *fname, const char *ext );pathは、完全パス名を格納するバッファです。
では、簡単なサンプルを見てみましょう。
/* makepath01.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char path[_MAX_PATH], drv[_MAX_DRIVE], dir[_MAX_DIR], filename[_MAX_FNAME],
ext[_MAX_DRIVE];
strcpy_s(drv, _MAX_DRIVE, "d");
strcpy_s(dir, _MAX_DIR, "\\abc\\def\\");
strcpy_s(filename, _MAX_FNAME, "makepath");
strcpy_s(ext, _MAX_EXT, "c");
_makepath_s(path, _MAX_PATH, drv, dir, filename, ext);
printf("fullpath : %s\n", path);
return 0;
}
strcpy_s関数を使っているので、string.hをインクルードする必要があります。ディレクトリパスを指定するときC言語では「\」は「\\」となる点に注意してください。
_MAX_PATHなどの定数はstdlib.hで次のように定義されています。
#define _MAX_PATH 260 /* max. length of full pathname */ #define _MAX_DRIVE 3 /* max. length of drive component */ #define _MAX_DIR 256 /* max. length of path component */ #define _MAX_FNAME 256 /* max. length of file name component */ #define _MAX_EXT 256 /* max. length of extension component */では、実行結果を見てみましょう。
今回も簡単でしたね。
Update Sep/06/2007 By Y.Kumei