_splitpath_s、_wsplitpath_s_splitpath_s, _wsplitpath_s

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


errno_t _splitpath_s(
   const char * path,
   char * drive,
   size_t driveNumberOfElements,
   char * dir,
   size_t dirNumberOfElements,
   char * fname,
   size_t nameNumberOfElements,
   char * ext,
   size_t extNumberOfElements
errno_t _wsplitpath_s(
   const wchar_t * path,
   wchar_t * drive,
   size_t driveNumberOfElements,
   wchar_t *dir,
   size_t dirNumberOfElements,
   wchar_t * fname,
   size_t nameNumberOfElements,
   wchar_t * ext,
   size_t extNumberOfElements
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _splitpath_s(
   const char *path,
   char (&drive)[drivesize],
   char (&dir)[dirsize],
   char (&fname)[fnamesize],
   char (&ext)[extsize]
); // C++ only
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _wsplitpath_s(
   const wchar_t *path,
   wchar_t (&drive)[drivesize],
   wchar_t (&dir)[dirsize],
   wchar_t (&fname)[fnamesize],
   wchar_t (&ext)[extsize]
); // C++ only


完全なパス。Full path.

ドライブ文字、コロン (:)。Drive letter, followed by a colon (:). 渡すことができますNULLドライブ文字を必要としない場合は、このパラメーターにします。You can pass NULL for this parameter if you do not need the drive letter.

サイズ、ドライブ1 バイト文字またはワイド文字バッファー。The size of the drive buffer in single-byte or wide characters. 場合ドライブNULL、この値は 0 である必要があります。If drive is NULL, this value must be 0.

末尾のスラッシュを含むディレクトリ パス。Directory path, including trailing slash. スラッシュ ( / )、円記号 ( \ )、または両方を使用できます。Forward slashes ( / ), backslashes ( \ ), or both may be used. 渡すことができますNULLディレクトリ パスを必要としない場合は、このパラメーターにします。You can pass NULL for this parameter if you do not need the directory path.

サイズ、 dir 1 バイト文字またはワイド文字バッファー。The size of the dir buffer in single-byte or wide characters. 場合dirNULL、この値は 0 である必要があります。If dir is NULL, this value must be 0.

拡張子なしの基本ファイル名。Base filename (without extension). 渡すことができますNULLファイル名を必要としない場合は、このパラメーターにします。You can pass NULL for this parameter if you do not need the filename.

サイズ、 fname 1 バイト文字またはワイド文字バッファー。The size of the fname buffer in single-byte or wide characters. 場合fnameNULL、この値は 0 である必要があります。If fname is NULL, this value must be 0.

先頭のピリオドを含むファイル名の拡張子 (.)。渡すことができますNULLファイル名拡張子が必要ない場合は、このパラメーターにします。Filename extension, including leading period (.).You can pass NULL for this parameter if you do not need the filename extension.

サイズext 1 バイト文字またはワイド文字バッファー。The size of ext buffer in single-byte or wide characters. 場合extNULL、この値は 0 である必要があります。If ext is NULL, this value must be 0.

戻り値Return Value

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

エラー条件Error Conditions

条件Condition 戻り値Return Value
ドライブNULLdriveNumberOfElements 0 以外の場合drive is NULL, driveNumberOfElements is non-zero EINVALEINVAL
ドライブ以外NULLdriveNumberOfElementsは 0 ですdrive is non-NULL, driveNumberOfElements is zero EINVALEINVAL
dirNULLdirNumberOfElements 0 以外の場合dir is NULL, dirNumberOfElements is non-zero EINVALEINVAL
dir以外NULLdirNumberOfElementsは 0 ですdir is non-NULL, dirNumberOfElements is zero EINVALEINVAL
fnameNULLnameNumberOfElements 0 以外の場合fname is NULL, nameNumberOfElements is non-zero EINVALEINVAL
fname以外NULLnameNumberOfElementsは 0 ですfname is non-NULL, nameNumberOfElements is zero EINVALEINVAL
extNULLextNumberOfElements 0 以外の場合ext is NULL, extNumberOfElements is non-zero EINVALEINVAL
ext以外NULLextNumberOfElementsは 0 ですext is non-NULL, extNumberOfElements is zero EINVALEINVAL

上記のいずれかの条件が発生すると、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。If any of the above conditions occurs, the invalid parameter handler is invoked, as described in Parameter Validation . 実行の継続が許可された場合に、これらの関数が設定errnoEINVAL戻ってEINVALします。If execution is allowed to continue, these functions set errno to EINVAL and return EINVAL.

これらの関数がオフに設定すると、空の文字列のすべてのバッファーでバッファーのいずれかが、結果を保持するには短すぎる場合は、 errnoERANGE、戻ってERANGEします。If any of the buffers is too short to hold the result, these functions clear all the buffers to empty strings, set errno to ERANGE, and return ERANGE.


_Splitpath_s関数は、4 つのコンポーネントにパスを解除します。The _splitpath_s function breaks a path into its four components. _splitpath_s自動的に現在使用中のマルチバイト コード ページに従ってマルチバイト文字シーケンスを認識し、必要に応じてマルチバイト文字の文字列引数を処理します。_splitpath_s automatically handles multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the multibyte code page currently in use. _wsplitpath_sのワイド文字バージョンは、 _splitpath_s; 引数 _wsplitpath_sはワイド文字列です。_wsplitpath_s is a wide-character version of _splitpath_s; the arguments to _wsplitpath_s are wide-character strings. それ以外では、これらの関数の動作は同じですThese functions behave identically otherwise

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

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_tsplitpath_s_tsplitpath_s _splitpath_s_splitpath_s _splitpath_s_splitpath_s _wsplitpath_s_wsplitpath_s

完全なパスの各コンポーネントが別々 のバッファーに格納されています。マニフェスト定数 _MAX_DRIVE_MAX_DIR_MAX_FNAME、および _MAX_EXT (STDLIB で定義されています。H) ファイルの各コンポーネントの最大許容サイズを指定します。Each component of the full path is stored in a separate buffer; the manifest constants _MAX_DRIVE, _MAX_DIR, _MAX_FNAME, and _MAX_EXT (defined in STDLIB.H) specify the maximum allowable size for each file component. 対応するマニフェスト定数よりも大きいファイル コンポーネントでは、ヒープ破損が発生します。File components larger than the corresponding manifest constants cause heap corruption.

マニフェスト定数の値を次の表に示します。The following table lists the values of the manifest constants.

名前Name [値]Value

完全なパスにコンポーネント (たとえば、filename) が含まれていない場合 _splitpath_s対応するバッファーに空の文字列を割り当てます。If the full path does not contain a component (for example, a filename), _splitpath_s assigns an empty string to the corresponding buffer.

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. 詳細については、「 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.


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

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


_makepath_s、_wmakepath_s」の例を参照してください。See the example for _makepath_s, _wmakepath_s.

関連項目See also

ファイル処理File Handling
_splitpath、_wsplitpath_splitpath, _wsplitpath
_fullpath、_wfullpath_fullpath, _wfullpath
_makepath、_wmakepath_makepath, _wmakepath