_splitpath、_wsplitpath
パス名を構成要素に分解します。 これらの関数のセキュリティを強化したバージョンについては、「_splitpath_s、_wsplitpath_s」を参照してください。
void _splitpath(
const char *path,
char *drive,
char *dir,
char *fname,
char *ext
);
void _wsplitpath(
const wchar_t *path,
wchar_t *drive,
wchar_t *dir,
wchar_t *fname,
wchar_t *ext
);
パラメーター
path
完全パス。drive
ドライブ文字。後ろにコロン (:) が付きます。 ドライブ文字が不要な場合は、このパラメーターに NULL を渡すことができます。dir
ディレクトリ パスと末尾のスラッシュ。 区切り記号にはスラッシュ (/) および円記号 (\) を使用でき、両方を混在させることもできます。 ディレクトリ パスが不要な場合は、このパラメーターに NULL を渡すことができます。fname
基本ファイル名 (拡張子なし)。 ファイル名が不要な場合は、このパラメーターに NULL を渡すことができます。ext
ファイル名の拡張子。先頭にピリオド (.) が付きます。 ファイル名の拡張子が不要な場合は、このパラメーターに NULL を渡すことができます。
解説
_splitpath 関数は、パスを 4 つの構成要素に分解します。 _splitpath は現在使用中のマルチバイト コード ページに従ってマルチバイト文字列を認識し、必要に応じてマルチバイト文字列引数を自動的に処理します。 _wsplitpath は _splitpath のワイド文字バージョンであり、_wsplitpath の引数はワイド文字列です。 それ以外では、これらの関数の動作は同じです。
セキュリティに関するメモ これらの関数は、バッファー オーバーランが原因で発生する可能性のある問題の影響を受けます。 バッファー オーバーランは、システムを攻撃するときによく使用される方法であり、その結果、認められていない権限が昇格されます。 詳細については、「Avoiding Buffer Overruns」を参照してください。 これらの関数のセキュリティを強化したバージョンについては、「_splitpath_s、_wsplitpath_s」を参照してください。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE & _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tsplitpath |
_splitpath |
_splitpath |
_wsplitpath |
完全なパスの各構成要素は、別々のバッファーに格納されます。各ファイル構成要素の最大サイズは、STDLIB.H に定義されているマニフェスト定数の _MAX_DRIVE、_MAX_DIR、_MAX_FNAME、および _MAX_EXT で指定されます。 ファイル構成要素が対応するマニフェスト定数よりも大きいと、ヒープの破損が発生します。
バッファー オーバーランの発生を回避するために、各バッファーのサイズは、対応するマニフェスト定数が示すサイズと同じにする必要があります。
マニフェスト定数の値を次の表に示します。
名前 |
値 |
---|---|
_MAX_DRIVE |
3 |
_MAX_DIR |
256 |
_MAX_FNAME |
256 |
_MAX_EXT |
256 |
完全なパスにファイル名などの構成要素が含まれていない場合、_splitpath は、対応するバッファーに空の文字列を割り当てます。
path 以外の不要なパラメーターについては、_splitpath に NULL を渡すことができます。
path が NULL の場合は、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、errno が EINVAL に設定され、関数から EINVAL が返されます。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_splitpath |
<stdlib.h> |
_wsplitpath |
<stdlib.h> または <wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
「_makepath」の例を参照してください。
同等の .NET Framework 関数
使用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。