_makepath_s, _wmakepath_s

Tworzy nazwę ścieżki na podstawie składników. Te funkcje to wersje programu _makepath_wmakepathz ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.

Składnia

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
Bufor pełnej ścieżki.

sizeInWords
Rozmiar buforu w słowach.

sizeInBytes
Rozmiar buforu w bajtach.

drive
Zawiera literę (A, B itd.) odpowiadającą żądanemu dysku i opcjonalnemu końcowemu dwukropekowi. _makepath_s Wstawia dwukropek automatycznie w ścieżce złożonej, jeśli jej brakuje. Jeśli drive ciąg jest NULL pusty lub wskazuje, w ciągu złożonym path nie pojawia się żadna litera dysku.

dir
Zawiera ścieżkę katalogów, w tym projektant dysku lub rzeczywistą nazwę pliku. Ukośnik końcowy jest opcjonalny, a ukośnik odwrotny (/) lub ukośnik odwrotny (\) lub oba mogą być używane w jednym dir argumencie. Jeśli nie określono ukośnika końcowego (/ lub \), zostanie on wstawiony automatycznie. Jeśli dir parametr jest NULL pusty lub wskazuje pusty ciąg, żadna ścieżka katalogu nie jest wstawiana w ciągu złożonym path .

fname
Zawiera nazwę pliku podstawowego bez żadnych rozszerzeń nazw plików. Jeśli fname parametr jest NULL pusty lub wskazuje pusty ciąg, w ciągu złożonym path nie jest wstawiona żadna nazwa pliku.

ext
Zawiera rzeczywiste rozszerzenie nazwy pliku z kropką wiodącą (.). _makepath_s Wstawia kropkę automatycznie, jeśli nie jest wyświetlana w pliku ext. Jeśli ext ciąg jest NULL pusty lub wskazuje go, żadne rozszerzenie nie zostanie wstawione w ciągu złożonym path .

Wartość zwracana

Zero w przypadku powodzenia; kod błędu dotyczący błędu.

Warunki błędu

path sizeInWords / sizeInBytes Zwrot Zawartość path
NULL dowolny EINVAL niezmodyfikowane
dowolny <= 0 EINVAL niezmodyfikowane

Jeśli wystąpi którykolwiek z powyższych warunków błędu, te funkcje wywołują nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, jest ustawione na EINVAL , errno a funkcje zwracają wartość EINVAL. NULL parametrów drive, fnamei ext. Aby uzyskać informacje o zachowaniu, gdy te parametry są wskaźnikami null lub pustymi ciągami, zobacz sekcję Uwagi.

Uwagi

Funkcja _makepath_s tworzy ciąg ścieżki złożonej z poszczególnych składników, przechowując wynik w pliku path. Może path zawierać literę dysku, ścieżkę katalogu, nazwę pliku i rozszerzenie nazwy pliku. _wmakepath_s jest wersją szerokoznakową ; _makepath_sargumenty, które mają _wmakepath_s być ciągami o szerokim znaku. _wmakepath_s i _makepath_s zachowywać się identycznie inaczej.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Mapowania procedur tekstu ogólnego

Procedura tchar.h _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_tmakepath_s _makepath_s _makepath_s _wmakepath_s

Argument path musi wskazywać pusty bufor wystarczająco duży, aby pomieścić pełną ścieżkę. Złożony path nie może być większy niż _MAX_PATH stała zdefiniowana w pliku Stdlib.h.

Jeśli ścieżka to NULL, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Ponadto errno parametr jest ustawiony na EINVALwartość . NULL wartości są dozwolone dla wszystkich innych parametrów.

W języku C++używanie tych funkcji jest uproszczone przez przeciążenia szablonu; przeciążenia mogą automatycznie wnioskować długość buforu (eliminując konieczność określenia argumentu rozmiaru) i mogą automatycznie zastępować starsze, niezabezpieczone funkcje nowszymi, bezpiecznymi odpowiednikami. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.

Wersje biblioteki debugowania tych funkcji najpierw wypełniają bufor 0xFE. Aby wyłączyć to zachowanie, użyj polecenia _CrtSetDebugFillThreshold.

Wymagania

Procedura Wymagany nagłówek
_makepath_s <stdlib.h>
_wmakepath_s <stdlib.h> lub <wchar.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// 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

Zobacz też

Obsługa plików
_fullpath, _wfullpath
_splitpath_s, _wsplitpath_s
_makepath, _wmakepath