_makepath
, _wmakepath
コンポーネントからパス名を作成します。 これらの関数のセキュリティを強化したバージョンを使用できます。「_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
完全なパスのバッファー。
drive
必要なドライブに対応する文字 (A、B など) と、この後に続くオプションのコロンを含んでいます。 _makepath
が指定されていない場合は、複合パスにコロンが自動的に挿入されます。 drive
が NULL
であるか空の文字列へのポインターである場合、合成される path
文字列にドライブ文字は含まれません。
dir
ドライブ指定子も実際のファイル名も含まない、ディレクトリのパスを含んでいます。 末尾のスラッシュは省略可能で、スラッシュ (/
) または円記号 (\
) または両方を 1 つの dir
引数で使用できます。 末尾のスラッシュ (/
または \
) が指定されていない場合は、自動的に挿入されます。 dir
が NULL
であるか空の文字列へのポインターである場合、合成された path
文字列にディレクトリ パスは挿入されません。
fname
ファイル名拡張子がないベース ファイル名が含まれています。 fname
が NULL
であるか空の文字列へのポインターである場合、合成された path
文字列にファイル名は挿入されません。
ext
先頭のピリオド (.
) の有無にかかわらず、実際のファイル名拡張子が含まれます。 _makepath
は、ピリオドが ext
に表示されない場合は自動的に挿入します。 ext
が NULL
であるか空の文字列へのポインターである場合、合成された path
文字列に拡張子は挿入されません。
解説
_makepath
関数は個別のコンポーネントから合成パス文字列を作成し、path
に結果を格納します。 path
に格納される可能性があるのは、ドライブ文字、ディレクトリ パス、ファイル名、ファイル名拡張子です。 _wmakepath
は _makepath
のワイド文字バージョンであり、 _wmakepath
の引数はワイド文字列です。 それ以外では、_wmakepath
と _makepath
の動作は同じです。
セキュリティに関するメモ null で終わる文字列を使用してください。 バッファー オーバーランを防ぐために、null で終わる文字列は path
バッファーのサイズを超えないようにしてください。 _makepath
では、複合パス文字列の長さが _MAX_PATH
を超えないようにしません。 詳細については、「バッファー オーバーランの回避」を参照してください。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン | _UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
---|---|---|---|
_tmakepath |
_makepath |
_makepath |
_wmakepath |
path
引数は、完全なパスを保持するのに十分な大きさの空のバッファーを指す必要があります。 合成 path
は、Stdlib.h で定義されている、_MAX_PATH
定数以下にする必要があります。
パスが NULL
場合、「パラメーターの検証 で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 さらに、errno
が EINVAL
に設定されます。 その他のすべてのパラメーターに対しては NULL
値が許可されます。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
_makepath |
<stdlib.h> |
_wmakepath |
<stdlib.h> または <wchar.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
// crt_makepath.c
#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
関連項目
ファイル処理
_fullpath
, _wfullpath
_splitpath
, _wsplitpath
_makepath_s
, _wmakepath_s