_makepath、_wmakepath
更新 : 2007 年 11 月
パス名の要素からパス名を作成します。これらの関数のセキュリティを強化したバージョンについては、「_makepath_s、_wmakepath_s」を参照してください。
void _makepath(
char *path,
const char *drive,
const char *dir,
const char *fname,
const char *ext
);
void _wmakepath(
wchar_t *path,
const wchar_t *drive,
const wchar_t *dir,
const wchar_t *fname,
const wchar_t *ext
);
パラメータ
path
完全パスのバッファ。_makepath は、path が _MAX_PATH を超えていないかどうかをチェックしません。drive
ドライブ名。dir
ディレクトリ パス。fname
ファイル名。ext
ファイル名の拡張子。
解説
_makepath 関数は、1 つのパスを作成し、path に格納します。パスには、ドライブ名、ディレクトリのパス、ファイル名、およびファイル名の拡張子が含まれます。ワイド文字を扱う場合は、_makepath ではなく _wmakepath を使用します。この場合、_wmakepath の引数にはワイド文字列を指定します。引数の指定以外では、_wmakepath と _makepath の動作は同じです。
セキュリティに関するメモ : |
---|
null で終わる文字列を使用します。null で終わる文字列のサイズが、対象のバッファのサイズを超えないようにしてください。詳細については、「Avoiding Buffer Overruns」を参照してください。 |
汎用テキスト ルーチンのマップ
Tchar.h のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tmakepath |
_makepath |
_makepath |
_wmakepath |
パスの要素を含むバッファを指す引数は次のとおりです。
drive
目的のドライブに対応する文字 (A、B など) を指定します。後続のコロンは省略できます。コロンを省略した場合、_makepath によって、コロンが自動的にパス名に挿入されます。drive が null 文字または空の文字列の場合、作成される path 文字列にドライブ名とコロンは含まれません。dir
ドライブ指定子と実際のファイル名を除いて、ディレクトリのパスを指定します。後続のスラッシュまたは円記号は省略できます。1 つの dir 引数には、スラッシュ (/) か円記号 (\)、またはその両方を使用することもできます。後続のスラッシュ (/) または円記号 (\) は、指定しなくても自動的に挿入されます。dir が null 文字または空の文字列の場合、作成される path 文字列にスラッシュや円記号は挿入されません。fname
拡張子の付いていない基本のファイル名を指定します。fname が NULL の場合、または空の文字列を指す場合、作成される path 文字列にファイル名は挿入されません。ext
実際のファイル名の拡張子を指定します。先頭のピリオド (.) は省略できます。ext にピリオドがない場合、_makepath によって自動的にピリオドが挿入されます。ext が null 文字または空の文字列の場合、作成される path 文字列にピリオドは挿入されません。
path 引数は、絶対パスを保持するのに十分な大きさの空きバッファを指す必要があります。path を構成するフィールドにサイズ制限はありませんが、作成される path の長さは、Stdlib.h に定義されている _MAX_PATH 定数以下にする必要があります。_MAX_PATH 定数は、現在のオペレーティング システムで処理できる長さを超えることがあります。
Visual C++ 2005 では、これらの関数は path パラメータの検証を行います。パスが NULL の場合は、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。さらに、errno は EINVAL に設定されます。NULL 値は他のパラメータにも使用できます。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_makepath |
<stdlib.h> |
_wmakepath |
<stdlib.h> または <wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_makepath.c
// compile with: /W3
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
_makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" ); // C4996
// Note: _makepath is deprecated; consider using _makepath_s instead
printf( "Path created with _makepath: %s\n\n", path_buffer );
_splitpath( path_buffer, drive, dir, fname, ext ); // C4996
// Note: _splitpath is deprecated; consider using _splitpath_s instead
printf( "Path extracted with _splitpath:\n" );
printf( " Drive: %s\n", drive );
printf( " Dir: %s\n", dir );
printf( " Filename: %s\n", fname );
printf( " Ext: %s\n", ext );
}
Path created with _makepath: c:\sample\crt\makepath.c
Path extracted with _splitpath:
Drive: c:
Dir: \sample\crt\
Filename: makepath
Ext: .c