_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.

1バイト文字またはワイド文字の dir バッファーのサイズ。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.

1バイト文字またはワイド文字の fname バッファーのサイズ。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.

1バイト文字またはワイド文字の ext バッファーのサイズ。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
ドライブNULL で、 driveNumberOfElements が0ではないdrive is NULL, driveNumberOfElements is non-zero EINVALEINVAL
ドライブNULL 以外で、 driveNumberOfElements が0です。drive is non-NULL, driveNumberOfElements is zero EINVALEINVAL
dirNULL です。 dirnumberofelements が0ではありませんdir is NULL, dirNumberOfElements is non-zero EINVALEINVAL
dirNULL ではありません。 dirnumberofelements が0です。dir is non-NULL, dirNumberOfElements is zero EINVALEINVAL
fnameNULL で、 nameNumberOfElements が0ではありませんfname is NULL, nameNumberOfElements is non-zero EINVALEINVAL
fnameNULL 以外で、 nameNumberOfElements が0です。fname is non-NULL, nameNumberOfElements is zero EINVALEINVAL
extNULL で、 extnumberofelements が0ではありませんext is NULL, extNumberOfElements is non-zero EINVALEINVAL
extNULL ではなく、 extnumberofelements が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

既定では、この関数のグローバル状態はアプリケーションにスコープが設定されています。By default, this function's global state is scoped to the application. これを変更するには、「 CRT でのグローバル状態」を参照してください。To change this, see Global state in the CRT.

汎用テキスト ルーチンのマップ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> で定義されています。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

完全なパスにコンポーネント (たとえばファイル名) が含まれていない場合、 _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. 詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。For more information, see Secure Template Overloads.

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


ルーチンによって返される値Routine 必須ヘッダーRequired header
_splitpath_s_splitpath_s <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