Sdílet prostřednictvím


_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 Vrácení 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, fnamea 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 Definovány _UNICODE Definovány
_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 NULLcesta , 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