次の方法で共有


_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 が指定されていない場合は、複合パスにコロンが自動的に挿入されます。 driveNULL であるか空の文字列へのポインターである場合、合成される path 文字列にドライブ文字は含まれません。

dir
ドライブ指定子も実際のファイル名も含まない、ディレクトリのパスを含んでいます。 末尾のスラッシュは省略可能で、スラッシュ (/) または円記号 (\) または両方を 1 つの dir 引数で使用できます。 末尾のスラッシュ (/ または \) が指定されていない場合は、自動的に挿入されます。 dirNULL であるか空の文字列へのポインターである場合、合成された path 文字列にディレクトリ パスは挿入されません。

fname
ファイル名拡張子がないベース ファイル名が含まれています。 fnameNULL であるか空の文字列へのポインターである場合、合成された path 文字列にファイル名は挿入されません。

ext
先頭のピリオド (.) の有無にかかわらず、実際のファイル名拡張子が含まれます。 _makepath は、ピリオドが extに表示されない場合は自動的に挿入します。 extNULL であるか空の文字列へのポインターである場合、合成された 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場合、「パラメーターの検証 で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 さらに、errnoEINVAL に設定されます。 その他のすべてのパラメーターに対しては 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