_splitpath_s
, _wsplitpath_s
Rozdělí název cesty do součástí. Tyto funkce jsou verze _splitpath
, _wsplitpath
s vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.
Syntaxe
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
Parametry
path
Úplná cesta.
drive
Písmeno jednotky následované dvojtečku (:
). Tento parametr můžete předat NULL
, pokud písmeno jednotky nepotřebujete.
driveNumberOfElements
Velikost vyrovnávací paměti v jednobajtů nebo širokých drive
znachů. Pokud drive
ano NULL
, tato hodnota musí být 0.
dir
Cesta k adresáři, včetně koncového lomítka. Lomítka ( /
), zpětné lomítka ( \\
) nebo obě můžou být použita. Tento parametr můžete předat NULL
, pokud cestu k adresáři nepotřebujete.
dirNumberOfElements
Velikost vyrovnávací paměti v jednobajtů nebo širokých dir
znachů. Pokud dir
ano NULL
, tato hodnota musí být 0.
fname
Základní název souboru (bez přípony). Tento parametr můžete předat NULL
, pokud název souboru nepotřebujete.
nameNumberOfElements
Velikost vyrovnávací paměti v jednobajtů nebo širokých fname
znachů. Pokud fname
ano NULL
, tato hodnota musí být 0.
ext
Přípona názvu souboru, včetně úvodní tečky (.
). Tento parametr můžete předat NULL
, pokud příponu názvu souboru nepotřebujete.
extNumberOfElements
Velikost vyrovnávacípamětich ext
Pokud ext
ano NULL
, tato hodnota musí být 0.
Vrácená hodnota
Nula v případě úspěchu; kód chyby při selhání.
Chybové podmínky
Podmínka | Vrácená hodnota |
---|---|
path je NULL |
EINVAL |
drive is NULL , driveNumberOfElements is non-zero |
EINVAL |
drive je ne,NULL je nula. driveNumberOfElements |
EINVAL |
dir is NULL , dirNumberOfElements is non-zero |
EINVAL |
dir je ne,NULL je nula. dirNumberOfElements |
EINVAL |
fname is NULL , nameNumberOfElements is non-zero |
EINVAL |
fname je ne,NULL je nula. nameNumberOfElements |
EINVAL |
ext is NULL , extNumberOfElements is non-zero |
EINVAL |
ext je ne,NULL je nula. extNumberOfElements |
EINVAL |
Pokud dojde k některé z výše uvedených podmínek, vyvolá se neplatná obslužná rutina parametru, jak je popsáno v ověření parametru . Pokud provádění může pokračovat, tyto funkce jsou nastaveny errno
na EINVAL
a vracet EINVAL
.
Pokud je některá z vyrovnávacích pamětí příliš krátká pro uložení výsledku, tyto funkce vymažou všechny vyrovnávací paměti na prázdné řetězce, nastaví errno
a ERANGE
vrátí ERANGE
.
Poznámky
Funkce _splitpath_s
rozdělí cestu do svých čtyř komponent. _splitpath_s
automaticky zpracovává vícebajtové řetězcové argumenty podle potřeby a rozpoznává sekvence vícebajtových znaků podle aktuálně používané znakové stránky s vícebajty. _wsplitpath_s
je verze širokého znaku _splitpath_s
; argumenty, které mají _wsplitpath_s
být řetězce širokého znaku. Tyto funkce se chovají stejně jinak.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Mapování rutin obecného textu
TCHAR.H rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_tsplitpath_s |
_splitpath_s |
_splitpath_s |
_wsplitpath_s |
Každá součást úplné cesty je uložena v samostatné vyrovnávací paměti; konstanty manifestu _MAX_DRIVE
, , _MAX_FNAME
_MAX_DIR
a _MAX_EXT
(definované v STDLIB.H
) určují maximální povolenou velikost pro každou komponentu souboru. Součásti souborů větší než odpovídající konstanty manifestu způsobují poškození haldy.
Následující tabulka uvádí hodnoty konstant manifestu.
Jméno | Hodnota |
---|---|
_MAX_DRIVE |
3 |
_MAX_DIR |
256 |
_MAX_FNAME |
256 |
_MAX_EXT |
256 |
Pokud úplná cesta neobsahuje komponentu (například název souboru), _splitpath_s
přiřadí k odpovídající vyrovnávací paměti prázdný řetězec.
V jazyce C++ je použití těchto funkcí zjednodušeno přetíženími šablon; přetížení mohou odvodit délku vyrovnávací paměti automaticky, čímž eliminuje nutnost zadat argument velikosti. Další informace naleznete v tématu Přetížení šablon zabezpečení.
Verze knihovny ladění těchto funkcí nejprve vyplní vyrovnávací paměť 0xFE. Chcete-li toto chování zakázat, použijte _CrtSetDebugFillThreshold
.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_splitpath_s |
<stdlib.h> |
_wsplitpath_s |
<stdlib.h> nebo <wchar.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
Podívejte se na příklad pro _makepath_s
, _wmakepath_s
.
Viz také
Zpracování souborů
_splitpath
, _wsplitpath
_fullpath
, _wfullpath
_getmbcp
_makepath
, _wmakepath
_setmbcp