次の方法で共有


_splitpath_s, _wsplitpath_s

パス名をコンポーネントに分割します。 これらの関数は、「CRT のセキュリティ機能」で説明されているように、セキュリティが強化されたバージョンの _splitpath_wsplitpath です。

構文

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

パラメーター

path
完全パス。

drive
ドライブ文字、その後にコロン (:)。 ドライブ文字が不要な場合は、このパラメーターに NULL を渡すことができます。

driveNumberOfElements
1 バイト文字またはワイド文字単位の drive バッファーのサイズ。 driveNULL である場合、この値は 0 でなければなりません。

dir
末尾のスラッシュを含む、ディレクトリ パス。 スラッシュ (/)、バックスラッシュ (\\)、または両方を使用できます。 ディレクトリ パスが不要な場合は、このパラメーターの NULL を渡すことができます。

dirNumberOfElements
1 バイト文字またはワイド文字単位の dir バッファーのサイズ。 dirNULL である場合、この値は 0 でなければなりません。

fname
拡張子なしの基本ファイル名。 ファイル名が不要な場合は、このパラメーターの NULL を渡すことができます。

nameNumberOfElements
1 バイト文字またはワイド文字単位の fname バッファーのサイズ。 fnameNULL である場合、この値は 0 でなければなりません。

ext
先頭のピリオド (.) を含む、ファイル名の拡張子。 ファイル名拡張子が不要な場合は、このパラメーターの NULL を渡すことができます。

extNumberOfElements
1 バイト文字またはワイド文字単位の ext バッファーのサイズ。 extNULL である場合、この値は 0 でなければなりません。

戻り値

正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。

エラー条件

条件 戻り値
pathNULL です EINVAL
driveNULL である場合、driveNumberOfElements はゼロ以外です EINVAL
driveNULL でない場合、driveNumberOfElements はゼロです EINVAL
dirNULL である場合、dirNumberOfElements はゼロ以外です EINVAL
dirNULL でない場合、dirNumberOfElements はゼロです EINVAL
fnameNULL である場合、nameNumberOfElements はゼロ以外です EINVAL
fnameNULL でない場合、nameNumberOfElements はゼロです EINVAL
extNULL である場合、extNumberOfElements はゼロ以外です EINVAL
extNULL でない場合、extNumberOfElements はゼロです EINVAL

上記のいずれかの条件が発生した場合は、「パラメーターの検証で説明されているように、無効なパラメーター ハンドラー呼び出されます。 実行の継続が許可された場合、これらの関数は errnoEINVAL に設定し、EINVAL を返します。

バッファーのいずれかが、結果を保持するには短すぎる場合、これらの関数はすべてのバッファーを空の文字列にクリアし、errnoERANGE に設定して、ERANGE を返します。

解説

_splitpath_s 関数は、パスを 4 つのコンポーネントに分割します。 _splitpath_s は、現在使用中のマルチバイト コード ページに従ってマルチバイト文字シーケンスを認識し、マルチバイト文字列の引数を適切な方法で自動的に処理します。 _wsplitpath_s_splitpath_sのワイド文字バージョンであり、 _wsplitpath_s の引数はワイド文字列です。 それ以外では、これらの関数の動作は同じです

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。

汎用テキスト ルーチンのマップ

TCHAR.H ルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_tsplitpath_s _splitpath_s _splitpath_s _wsplitpath_s

完全なパスの各コンポーネントは、別々のバッファーに格納されます。マニフェスト定数 _MAX_DRIVE_MAX_DIR_MAX_FNAME_MAX_EXT (STDLIB.H で定義される) で、各ファイル コンポーネントの最大許容サイズを指定します。 対応するマニフェスト定数よりも大きいファイル コンポーネントでは、ヒープ破損が発生します。

マニフェスト定数の値を次の表に示します。

名前
_MAX_DRIVE 3
_MAX_DIR 256
_MAX_FNAME 256
_MAX_EXT 256

完全なパスにコンポーネント (ファイル名など) が含まれていない場合、 _splitpath_s は対応するバッファーに空の文字列を割り当てます。

C++ では、テンプレートのオーバーロードによってこれらの関数を簡単に使用できます。オーバーロードでは、バッファー長を自動的に推論できるため、サイズ引数を指定する必要がなくなります。 詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。

これらの関数のデバッグ ライブラリ バージョンでは、最初にバッファーを 0xFE で埋めます。 この動作を無効にするには、_CrtSetDebugFillThreshold を使用します。

要件

ルーチンによって返される値 必須ヘッダー
_splitpath_s <stdlib.h>
_wsplitpath_s <stdlib.h> または <wchar.h>

互換性の詳細については、「 Compatibility」を参照してください。

_makepath_s_wmakepath_s の例を参照してください。

関連項目

ファイル処理
_splitpath, _wsplitpath
_fullpath, _wfullpath
_getmbcp
_makepath, _wmakepath
_setmbcp