_makepath_s _wmakepath_s
Vytvoří název cesty z komponent.Tyto verze jsou _makepath, _wmakepath s vylepšení zabezpečení popsaným v Funkce zabezpečení v CRT.
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
[výstup]path
Vyrovnávací paměť úplnou cestu.[v]sizeInWords
Velikost vyrovnávací paměti v slova.[v]sizeInBytes
Velikost vyrovnávací paměti v bajtech.[v]drive
Písmeno (A, B a tak dále) obsahuje odpovídající požadovanou jednotku a volitelné koncové dvojtečku._makepath_sautomaticky vloží dvojtečka ve složené cestě Jestliže chybíPokud drive je NULL nebo odkazuje na prázdný řetězec, zobrazí se ve složené žádné písmeno jednotky path řetězec.[v]dir
Obsahuje cestu adresáře není včetně označení jednotky nebo název skutečný soubor.Koncové lomítko je nepovinný a lomítko (/) nebo zpětné lomítko (\) nebo obojí může být použita v jednom dir argument.Pokud žádné koncové lomítko (/ nebo \) je zadán automaticky vložen.Pokud dir je NULL nebo odkazuje na prázdný řetězec, žádná cesta adresáře je vložena do složené path řetězec.[v]fname
Obsahuje základní název souboru bez přípony všech souborů.Pokud fname je NULL nebo odkazuje na prázdný řetězec, název souboru se vloží do složené path řetězec.[v]ext
Obsahuje skutečné příponu názvu, s nebo bez úvodní tečky (.)._makepath_sautomaticky vloží období, pokud se nezobrazí v ext.Pokud ext je NULL nebo odkazuje na prázdný řetězec bez přípony je vložena do složené path řetězec.
Vrácená hodnota
Nula, pokud je úspěšná. Kód chyby při selhání.
Chybové podmínky
path |
sizeInWords / sizeInBytes |
Vrátit |
Obsahpath |
---|---|---|---|
NULL |
žádné |
EINVAL |
Nezměněno |
žádné |
< = 0 |
EINVAL |
Nezměněno |
Pokud dojde k některé z výše uvedených podmínek chyba, tyto funkce vyvolat popisovač neplatný parametr popsaným v Ověření parametrů.Pokud je povoleno spuštění pokračovat, errno je nastavena naEINVAL a vrátí funkceEINVAL**.** NULLje povolena pro parametry drive, fname, a ext.Informace o chování při tyto parametry jsou ukazatele s hodnotou null nebo prázdný řetězec, naleznete v části poznámky.
Poznámky
_makepath_s Funkce vytvoří řetězec složené cesty z jednotlivých součástí, ukládání výsledku v path.path Může obsahovat písmeno jednotky, cestu adresáře, název souboru a příponu názvu souboru._wmakepath_sje verze celého znaku _makepath_s; argumenty _wmakepath_s jsou celý znak řetězce._wmakepath_sa _makepath_s chovají jinak shodně.
Obecný Text rutinní mapování
Rutina Tchar.h |
_UNICODE a _MBCS není definován |
_MBCS, definice |
_UNICODE, definice |
---|---|---|---|
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
path Argument musí odkazovat na prázdný vyrovnávací paměť dostatečně velké pro uložení úplnou cestu.Složené path musí být větší než _MAX_PATH konstanta, definované v Stdlib.h.
Pokud je cesta NULL, vyvolat neplatný parametr popisovače, jak je popsáno v Ověření parametrů.Kromě toho errno je nastavena na EINVAL.NULLjsou povoleny hodnoty všech parametrů.
V jazyce C++ použití těchto funkcí je zjednodušeno díky šablony přetížení; přetížení automaticky odvodit vyrovnávací paměti (není tak nutné zadat argument velikost) a jsou automaticky nahradit starší, -secure funkce s jejich protějšky novější, zabezpečené.Další informace naleznete v tématu Přetížení šablony zabezpečení.
Ladicí verze tyto funkce nejprve vyplnit vyrovnávací paměti s 0xFD.Toto chování lze zakázat pomocí _CrtSetDebugFillThreshold.
Požadavky
Rutina |
Požadované záhlaví |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> nebo <wchar.h> |
Další informace o kompatibilitě v tématu Compatibility v úvodu.
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 );
}
Výsledek
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