共用方式為


_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。 如需詳細資訊,請參閱平台叫用範例

請參閱

參考

檔案處理

_splitpath _wsplitpath

_fullpath _wfullpath

_getmbcp

_makepath _wmakepath

_setmbcp