將路徑分成元件。 如需這些函式的更安全版本可用,請參閱 _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 函式會將一個路徑分割為它的四個元件。
_splitpath 會根據目前使用中的多位元組字碼頁,自動將多位元組字元字串引數處理為適當且可辨識的多位元組字元序列。
_wsplitpath 是 _splitpath的寬字元版本; _wsplitpath 的引數是寬字元字串。 除此之外,這些函式的行為相同。
安全性注意事項 這些函式受限於緩衝區滿溢。 緩衝區滿溢問題是系統攻擊常見的方法,會造成權限無故提高。 如需詳細資訊,請參閱 Avoiding Buffer Overruns (避免緩衝區滿溢)。 這些函式已有更安全的版本可用,請參閱 _splitpath_s、_wsplitpath_s。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
一般文字常式對應
TCHAR.H 常式 |
_UNICODE 和 _MBCS 未定義 |
_MBCS 已定義 |
_UNICODE 已定義 |
|---|---|---|---|
_tsplitpath |
_splitpath |
_splitpath |
_wsplitpath |
完整路徑的每個元件都會儲存在個別的緩衝區中;指令清單常數_MAX_DRIVE、 _MAX_DIR和 _MAX_FNAME_MAX_EXT (定義於 STDLIB.H中) 會指定每個檔案元件的大小上限。 大於對應資訊清單常數的檔案元件會造成堆積損毀。
每個緩衝區都必須與其對應的資訊清單常數一樣大,以避免潛在緩衝區滿溢。
下表列出資訊清單常數的值。
| 名稱 | 值 |
|---|---|
_MAX_DRIVE |
3 |
_MAX_DIR |
256 |
_MAX_FNAME |
256 |
_MAX_EXT |
256 |
如果完整路徑不包含元件(例如檔名), _splitpath 請將空字串指派給對應的緩衝區。
您可以針對您不需要的任何NULL參數傳遞_splitpath至 path 。
如果 path 為 NULL,將會叫用無效參數處理常式,如參數驗證 (部分機器翻譯) 中所述。 如果允許繼續執行,則會將 errno 設定為 EINVAL。
需求
| 常式 | 必要的標頭 |
|---|---|
_splitpath |
<stdlib.h> |
_wsplitpath |
<stdlib.h> 或 <wchar.h> |
如需相容性詳細資訊,請參閱相容性。
範例
請參閱 _makepath 的範例。
另請參閱
檔案處理
_fullpath、_wfullpath
_getmbcp
_makepath、_wmakepath
_setmbcp
_splitpath_s、_wsplitpath_s