_splitpath、_wsplitpath
Break a path name into components. 這些函式已有更安全的版本可用,請參閱 _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。
一般文字常式對應
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 且函式會傳回 EINVAL。
需求
常式 |
必要的標頭 |
---|---|
_splitpath |
<stdlib.h> |
_wsplitpath |
<stdlib.h> 或 <wchar.h> |
如需其他相容性資訊,請參閱<簡介>中的相容性。
範例
請參閱 _makepath 的範例。
.NET Framework 對等用法
不適用。若要呼叫標準 C 函式,請使用 PInvoke。如需詳細資訊,請參閱平台叫用範例。