_makepath_s、_wmakepath_s_makepath_s, _wmakepath_s

コンポーネントからパス名を作成します。Creates a path name from components. これらは、「CRT のセキュリティ機能」の説明にあるとおり、セキュリティが強化されたバージョンの _makepath、_wmakepath です。These are versions of _makepath, _wmakepath with security enhancements as described in Security Features in the CRT.

構文Syntax

errno_t _makepath_s(
   char *path,
   size_t sizeInBytes,
   const char *drive,
   const char *dir,
   const char *fname,
   const char *ext
);
errno_t _wmakepath_s(
   wchar_t *path,
   size_t sizeInWords,
   const wchar_t *drive,
   const wchar_t *dir,
   const wchar_t *fname,
   const wchar_t *ext
);
template <size_t size>
errno_t _makepath_s(
   char (&path)[size],
   const char *drive,
   const char *dir,
   const char *fname,
   const char *ext
); // C++ only
template <size_t size>
errno_t _wmakepath_s(
   wchar_t (&path)[size],
   const wchar_t *drive,
   const wchar_t *dir,
   const wchar_t *fname,
   const wchar_t *ext
); // C++ only

パラメーターParameters

pathpath
完全なパスのバッファー。Full path buffer.

sizeInWordssizeInWords
バッファーのサイズ (単語単位)。Size of the buffer in words.

sizeInBytessizeInBytes
バッファーのサイズ (バイト単位)。Size of the buffer in bytes.

ドライブdrive
必要なドライブに対応する文字 (A、B など) と、省略可能である後続のコロンを含んでいます。Contains a letter (A, B, and so on) corresponding to the desired drive and an optional trailing colon. _makepath_sが存在しない場合、複合パスのコロンを自動的に挿入します。_makepath_s inserts the colon automatically in the composite path if it is missing. 場合ドライブNULLまたは空の文字列へのポインター、ドライブ文字は表示されません、合成パス文字列。If drive is NULL or points to an empty string, no drive letter appears in the composite path string.

dirdir
ドライブ指定子も実際のファイル名も含まない、ディレクトリのパスを含んでいます。Contains the path of directories, not including the drive designator or the actual file name. 末尾のスラッシュは省略可能なとフォワード スラッシュ (/) または円記号 (\) 1 つの両方を使用する場合がありますまたはdir引数。The trailing slash is optional, and either a forward slash (/) or a backslash (\) or both might be used in a single dir argument. 末尾のスラッシュ (/ と \ のいずれも) を指定していない場合は、スラッシュが自動的に挿入されます。If no trailing slash (/ or \) is specified, it is inserted automatically. 場合dirNULLまたは空の文字列でないディレクトリ パスへのポインターは、合成挿入パス文字列。If dir is NULL or points to an empty string, no directory path is inserted in the composite path string.

fnamefname
ファイル名拡張子がないベース ファイル名が含まれています。Contains the base file name without any file name extensions. 場合fnameNULLまたは空の文字列でないファイル名へのポインターは、合成挿入パス文字列。If fname is NULL or points to an empty string, no filename is inserted in the composite path string.

extext
先行するピリオド (.) の有無を問わず、実際のファイル名拡張子が含まれています。Contains the actual file name extension, with or without a leading period (.). _makepath_sが表示されない場合、期間を自動的に挿入extします。場合extNULLまたは拡張子のない空の文字列の指すは、合成挿入パス文字列。_makepath_s inserts the period automatically if it does not appear in ext. If ext is NULL or points to an empty string, no extension is inserted in the composite path string.

戻り値Return Value

正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。Zero if successful; an error code on failure.

エラー条件Error Conditions

pathpath sizeInWords / sizeInBytessizeInWords / sizeInBytes ReturnReturn 内容パスContents of path
NULLNULL 任意any EINVALEINVAL 変更されないnot modified
任意any <= 0<= 0 EINVALEINVAL 変更されないnot modified

上記のいずれかのエラー条件が発生すると、これらの関数は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーを呼び出します。If any of the above error conditions occurs, these functions invoke the invalid parameter handler, as described in Parameter Validation. 続けるには、実行が許可された場合errnoに設定されているEINVAL関数とEINVALします。If execution is allowed to continue, errno is set to EINVAL and the functions returns EINVAL. NULLパラメーターは許可されてドライブfname、およびextします。これらのパラメーターが Null ポインターまたは空の文字列である場合の動作の詳細については、「コメント」セクションを参照してください。NULL is allowed for the parameters drive, fname, and ext. For information about the behavior when these parameters are null pointers or empty strings, see the Remarks section.

RemarksRemarks

_Makepath_s関数の結果を格納する個別のコンポーネントから合成パス文字列を作成するパスします。The _makepath_s function creates a composite path string from individual components, storing the result in path. パスドライブ文字、ディレクトリのパス、ファイル名、およびファイル名拡張子を含めることができます。The path might include a drive letter, directory path, file name, and file name extension. _wmakepath_sのワイド文字バージョンは、 _makepath_s; 引数 _wmakepath_sはワイド文字列です。_wmakepath_s is a wide-character version of _makepath_s; the arguments to _wmakepath_s are wide-character strings. _wmakepath_s_makepath_s動作は同じです。_wmakepath_s and _makepath_s behave identically otherwise.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

Tchar.h のルーチンTchar.h routine _UNICODE および _MBCS が未定義の場合_UNICODE and _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_tmakepath_s_tmakepath_s _makepath_s_makepath_s _makepath_s_makepath_s _wmakepath_s_wmakepath_s

パス引数は、空の完全なパスを保持するために十分な大きさのバッファーを指す必要があります。The path argument must point to an empty buffer large enough to hold the complete path. 複合パスを超える必要があります、 _MAX_PATH Stdlib.h で定義されている定数。The composite path must be no larger than the _MAX_PATH constant, defined in Stdlib.h.

パスがある場合NULLで説明されているとおり、無効なパラメーター ハンドラーが呼び出されますパラメーターの検証です。If path is NULL, the invalid parameter handler is invoked, as described in Parameter Validation. さらに、 errnoに設定されているEINVALします。In addition, errno is set to EINVAL. NULL他のすべてのパラメーター値を使用できます。NULL values are allowed for all other parameters.

C++ では、これらの関数の使用はテンプレートのオーバーロードによって簡素化されます。オーバーロードでは、バッファー長を自動的に推論できる (サイズの引数を指定する必要がなくなる) だけでなく、古くてセキュリティが万全ではない関数を新しく安全な関数に自動的に置き換えることができます。In C++, using these functions is simplified by template overloads; the overloads can infer buffer length automatically (eliminating the need to specify a size argument) and they can automatically replace older, non-secure functions with their newer, secure counterparts. 詳細については、「 Secure Template Overloads」を参照してください。For more information, see Secure Template Overloads.

これらの関数のデバッグ バージョンは、最初にバッファーを 0xFD で埋めます。The debug versions of these functions first fill the buffer with 0xFD. この動作を無効にするには、_CrtSetDebugFillThreshold.を使用します。To disable this behavior, use _CrtSetDebugFillThreshold.

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
_makepath_s_makepath_s <stdlib.h><stdlib.h>
_wmakepath_s_wmakepath_s <stdlib.h> または <wchar.h><stdlib.h> or <wchar.h>

互換性の詳細については、「 互換性」を参照してください。For more compatibility information, see Compatibility.

Example

// crt_makepath_s.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];
   errno_t err;

   err = _makepath_s( path_buffer, _MAX_PATH, "c", "\\sample\\crt\\",
                      "crt_makepath_s", "c" );
   if (err != 0)
   {
      printf("Error creating path. Error code %d.\n", err);
      exit(1);
   }
   printf( "Path created with _makepath_s: %s\n\n", path_buffer );
   err = _splitpath_s( path_buffer, drive, _MAX_DRIVE, dir, _MAX_DIR, fname,
                       _MAX_FNAME, ext, _MAX_EXT );
   if (err != 0)
   {
      printf("Error splitting the path. Error code %d.\n", err);
      exit(1);
   }
   printf( "Path extracted with _splitpath_s:\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_s: c:\sample\crt\crt_makepath_s.c

Path extracted with _splitpath_s:
   Drive: c:
   Dir: \sample\crt\
   Filename: crt_makepath_s
   Ext: .c

関連項目See also

ファイル処理File Handling
_fullpath、_wfullpath_fullpath, _wfullpath
_splitpath_s、_wsplitpath_s_splitpath_s, _wsplitpath_s
_makepath、_wmakepath_makepath, _wmakepath