_splitpath_s _wsplitpath_s
分成元件中的路徑名稱。 這些是舊版 _splitpath、 _wsplitpath 中所述的安全性增強功能與安全性功能,則在 CRT 中。
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
參數
[in] path
完整路徑。[out] drive
磁碟機代號,後面接冒號 (:)。 您可以傳遞NULL這個參數,如果您不需要的磁碟機代號。[in] driveNumberOfElements
大小的drive以單一位元組或寬字元為單位的緩衝區。 如果drive是NULL,這個值必須是 0。[out] dir
目錄路徑,包括結尾的斜線。 正斜線 ( / ),反斜線 ( \ ),或兩者皆可使用。 您可以傳遞NULL這個參數,如果您不需要的目錄路徑。[in] dirNumberOfElements
大小的dir以單一位元組或寬字元為單位的緩衝區。 如果dir是NULL,這個值必須是 0。[out] fname
(不含副檔名) 的基底檔名。 您可以傳遞NULL這個參數,如果您不需要的檔案名稱。[in] nameNumberOfElements
大小的fname以單一位元組或寬字元為單位的緩衝區。 如果fname是NULL,這個值必須是 0。[out] ext
檔名的副檔名,包括前置時間 (.).您可以傳遞NULL這個參數,如果您不需要檔名的副檔名。[in] extNumberOfElements
大小的ext以單一位元組或寬字元為單位的緩衝區。 如果ext是NULL,這個值必須是 0。
傳回值
如果成功 ;,零 錯誤碼錯誤所致。
錯誤狀況
條件 |
傳回值 |
---|---|
path是 NULL |
EINVAL |
driveis NULL, driveNumberOfElements is non-zero |
EINVAL |
driveis non-NULL, driveNumberOfElements is zero |
EINVAL |
diris NULL, dirNumberOfElements is non-zero |
EINVAL |
diris non-NULL, dirNumberOfElements is zero |
EINVAL |
fnameis NULL, nameNumberOfElements is non-zero |
EINVAL |
fnameis non-NULL, nameNumberOfElements is zero |
EINVAL |
extis NULL, extNumberOfElements is non-zero |
EINVAL |
extis non-NULL, extNumberOfElements is zero |
EINVAL |
如果任一上述情況發生時,不正確的參數處理常式會叫用,如所述參數驗證 。 如果執行,則允許繼續執行,這些函式會設定errno到EINVAL ,並傳回EINVAL。
如果任何緩衝區來保存結果長度太短,這些函式清除,並將空字串,將設定的所有緩衝區errno到ERANGE,並傳回ERANGE。
備註
_splitpath_s 函式會分成四個元件中的路徑。 _splitpath_s 會自動處理多位元組字元字串引數視需要辨識多位元組字元順序,根據目前使用中的多位元組字碼頁。 _wsplitpath_s 寬字元版本的**_splitpath_s**。 引數去_wsplitpath_s是寬字元字串。 這些函式具有相同其他方式
泛用文字常式對應
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++ 中,使用這些函式已經過簡化的樣板的多載 ; 多載可以緩衝區長度自動推斷,而不必指定 size 引數。 如需詳細資訊,請參閱 安全範本多載。
這些函式的偵錯版本第一次填滿與 0xFD 的緩衝區。 若要停用這種情形,請使用_CrtSetDebugFillThreshold。
需求
常式 |
所需的標頭 |
---|---|
_splitpath_s |
<stdlib.h> |
_wsplitpath_s |
<stdlib.h> 或者 <wchar.h> |
其他的相容性資訊,請參閱相容性在簡介中。
範例
請參閱範例的_makepath_s _wmakepath_s。
.NET Framework 對等用法
不適用。 若要呼叫標準的 c 函式,使用PInvoke。 如需詳細資訊,請參閱平台叫用範例。