_makepath_s
, _wmakepath_s
Vytvoří název cesty z komponent. Tyto funkce jsou verze _makepath
, _wmakepath
s vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.
Syntaxe
errno_t _makepath_s(
char *path,
size_t sizeInBytes,
const char *drive,
const char *dir,
const char *fname,
const char *ext
);
errno_t _wmakepath_s(
wchar_t *path,
size_t sizeInWords,
const wchar_t *drive,
const wchar_t *dir,
const wchar_t *fname,
const wchar_t *ext
);
template <size_t size>
errno_t _makepath_s(
char (&path)[size],
const char *drive,
const char *dir,
const char *fname,
const char *ext
); // C++ only
template <size_t size>
errno_t _wmakepath_s(
wchar_t (&path)[size],
const wchar_t *drive,
const wchar_t *dir,
const wchar_t *fname,
const wchar_t *ext
); // C++ only
Parametry
path
Vyrovnávací paměť úplné cesty.
sizeInWords
Velikost vyrovnávací paměti ve slovech.
sizeInBytes
Velikost vyrovnávací paměti v bajtech.
drive
Obsahuje písmeno (A, B atd.), které odpovídá požadované jednotce a volitelnému koncovému dvojtečku. _makepath_s
vloží dvojtečku automaticky do složené cesty, pokud chybí. Pokud drive
je NULL
nebo odkazuje na prázdný řetězec, ve složeného path
řetězci se nezobrazí žádné písmeno jednotky.
dir
Obsahuje cestu adresářů, včetně návrhátoru jednotky nebo skutečného názvu souboru. Koncové lomítko je volitelné a buď lomítko (/), nebo zpětné lomítko (\) nebo obojí může být použito v jednom dir
argumentu. Pokud není zadáno žádné koncové lomítko (/ nebo \), vloží se automaticky. Pokud dir
je NULL
nebo odkazuje na prázdný řetězec, není do složeného path
řetězce vložena žádná cesta k adresáři.
fname
Obsahuje název základního souboru bez přípon názvů souborů. Pokud fname
je NULL
nebo odkazuje na prázdný řetězec, do složeného path
řetězce se nevloží žádný název souboru.
ext
Obsahuje skutečnou příponu názvu souboru s počáteční tečkou (.). _makepath_s
vloží tečku automaticky, pokud se nezobrazí v ext
. Pokud ext
je NULL
nebo odkazuje na prázdný řetězec, do složeného path
řetězce se nevloží žádné rozšíření.
Vrácená hodnota
Nula v případě úspěchu; kód chyby při selhání.
Chybové podmínky
path |
sizeInWords / sizeInBytes |
Zpět | Obsah path |
---|---|---|---|
NULL |
jakékoliv | EINVAL |
neupraveno |
jakékoliv | <= 0 | EINVAL |
neupraveno |
Pokud dojde k některé z výše uvedených chybových podmínek, tyto funkce volají neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je povoleno pokračovat provádění, errno
je nastavena na EINVAL
a funkce vrátí EINVAL
. NULL
je povolena pro parametry drive
, fname
a ext
. Informace o chování, pokud tyto parametry jsou ukazatele null nebo prázdné řetězce, naleznete v části Poznámky.
Poznámky
Funkce _makepath_s
vytvoří složený řetězec cesty z jednotlivých komponent a uloží výsledek do path
. Může path
obsahovat písmeno jednotky, cestu k adresáři, název souboru a příponu názvu souboru. _wmakepath_s
je verze širokého znaku _makepath_s
; argumenty, které mají _wmakepath_s
být řetězce širokého znaku. _wmakepath_s
a _makepath_s
chovat se 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
Rutina Tchar.h | _UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
Argument path
musí odkazovat na prázdnou vyrovnávací paměť dostatečně velká, aby se podržel úplná cesta. Složený soubor path
nesmí být větší než konstanta _MAX_PATH
definovaná v souboru Stdlib.h.
Pokud je NULL
cesta , je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Kromě toho errno
je nastavena na EINVAL
. NULL
pro všechny ostatní parametry jsou povoleny hodnoty.
V jazyce C++ je použití těchto funkcí zjednodušeno přetíženími šablon; přetížení mohou automaticky odvodit délku vyrovnávací paměti (eliminuje potřebu zadat argument velikosti) a mohou automaticky nahradit starší, nezabezpečené funkce jejich novějšími zabezpečenými protějšky. 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 |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> nebo <wchar.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_makepath_s.c
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
errno_t err;
err = _makepath_s( path_buffer, _MAX_PATH, "c", "\\sample\\crt\\",
"crt_makepath_s", "c" );
if (err != 0)
{
printf("Error creating path. Error code %d.\n", err);
exit(1);
}
printf( "Path created with _makepath_s: %s\n\n", path_buffer );
err = _splitpath_s( path_buffer, drive, _MAX_DRIVE, dir, _MAX_DIR, fname,
_MAX_FNAME, ext, _MAX_EXT );
if (err != 0)
{
printf("Error splitting the path. Error code %d.\n", err);
exit(1);
}
printf( "Path extracted with _splitpath_s:\n" );
printf( " Drive: %s\n", drive );
printf( " Dir: %s\n", dir );
printf( " Filename: %s\n", fname );
printf( " Ext: %s\n", ext );
}
Path created with _makepath_s: c:\sample\crt\crt_makepath_s.c
Path extracted with _splitpath_s:
Drive: c:
Dir: \sample\crt\
Filename: crt_makepath_s
Ext: .c
Viz také
Zpracování souborů
_fullpath
, _wfullpath
_splitpath_s
, _wsplitpath_s
_makepath
, _wmakepath