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

構文Syntax

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

パラメーターParameters

pathpath
完全パス。Full path.

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

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

エイリアスdir
末尾のスラッシュを含む、ディレクトリ パス。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.

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

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

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

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

extNumberOfElementsextNumberOfElements
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ですpath is NULL EINVALEINVAL
ドライブ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.

RemarksRemarks

_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_DIR_MAX_FNAME、および 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
_MAX_DRIVE_MAX_DRIVE 33
_MAX_DIR_MAX_DIR 256256
_MAX_FNAME_MAX_FNAME 256256
_MAX_EXT_MAX_EXT 256256

完全なパスにコンポーネント (たとえばファイル名) が含まれていない場合、 _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.

[要件]Requirements

ルーチンによって返される値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.

Example

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

関連項目See also

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