_splitpath_s, _wsplitpath_s

Dzieli nazwę ścieżki na składniki. Te funkcje to wersje programu _splitpath_wsplitpathz ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.

Składnia

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
Pełna ścieżka.

drive
Litera dysku, po której następuje dwukropek (:). Możesz przekazać NULL ten parametr, jeśli nie potrzebujesz litery dysku.

driveNumberOfElements
Rozmiar buforu drive w postaci znaków jednobajtowych lub szerokich. Jeśli drive wartość to NULL, ta wartość musi mieć wartość 0.

dir
Ścieżka katalogu, w tym ukośnik końcowy. Ukośniki do przodu ( / ), ukośniki odwrotne ( \\ ) lub oba mogą być używane. Ten parametr można przekazać NULL , jeśli nie potrzebujesz ścieżki katalogu.

dirNumberOfElements
Rozmiar buforu dir w postaci znaków jednobajtowych lub szerokich. Jeśli dir wartość to NULL, ta wartość musi mieć wartość 0.

fname
Nazwa pliku podstawowego (bez rozszerzenia). Jeśli nie potrzebujesz nazwy pliku, możesz przekazać NULL ten parametr.

nameNumberOfElements
Rozmiar buforu fname w postaci znaków jednobajtowych lub szerokich. Jeśli fname wartość to NULL, ta wartość musi mieć wartość 0.

ext
Rozszerzenie nazwy pliku, w tym okres wiodący (.). Ten parametr można przekazać NULL , jeśli nie potrzebujesz rozszerzenia nazwy pliku.

extNumberOfElements
Rozmiar buforu ext w postaci znaków jednobajtowych lub szerokich. Jeśli ext wartość to NULL, ta wartość musi mieć wartość 0.

Wartość zwracana

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

Warunki błędu

Stan Wartość zwracana
path Jest NULL EINVAL
drive is NULL, driveNumberOfElements jest inny niż zero EINVAL
drive jest innyNULL niż, driveNumberOfElements ma wartość zero EINVAL
dir is NULL, dirNumberOfElements jest inny niż zero EINVAL
dir jest innyNULL niż, dirNumberOfElements ma wartość zero EINVAL
fname is NULL, nameNumberOfElements jest inny niż zero EINVAL
fname jest innyNULL niż, nameNumberOfElements ma wartość zero EINVAL
ext is NULL, extNumberOfElements jest inny niż zero EINVAL
ext jest innyNULL niż, extNumberOfElements ma wartość zero EINVAL

Jeśli wystąpi którykolwiek z powyższych warunków, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametru . Jeśli wykonywanie jest dozwolone do kontynuowania, te funkcje są ustawione errno na EINVAL i zwracają wartość EINVAL.

Jeśli którykolwiek z buforów jest zbyt krótki, aby pomieścić wynik, te funkcje czyścią wszystkie bufory do pustych ciągów, ustaw na errnoERANGE, i zwracają wartość ERANGE.

Uwagi

Funkcja _splitpath_s dzieli ścieżkę na cztery składniki. _splitpath_s Automatycznie obsługuje argumenty ciągów wielobajtowych znaków zgodnie z potrzebami, rozpoznając sekwencje wielobajtowe znaków zgodnie ze stroną kodową wielobajtową, która jest obecnie używana. _wsplitpath_s jest wersją szerokoznakową ; _splitpath_sargumenty, które mają _wsplitpath_s być ciągami o szerokim znaku. Te funkcje zachowują 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

TCHAR.H Rutynowych _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_tsplitpath_s _splitpath_s _splitpath_s _wsplitpath_s

Każdy składnik pełnej ścieżki jest przechowywany w osobnym buforze; stałe manifestu _MAX_DRIVE, , _MAX_DIR_MAX_FNAMEi _MAX_EXT (zdefiniowane w pliku STDLIB.H) określają maksymalny dozwolony rozmiar dla każdego składnika pliku. Składniki plików większe niż odpowiadające stałe manifestu powodują uszkodzenie stert.

W poniższej tabeli wymieniono wartości stałych manifestu.

Nazwa/nazwisko Wartość
_MAX_DRIVE 3
_MAX_DIR 256
_MAX_FNAME 256
_MAX_EXT 256

Jeśli pełna ścieżka nie zawiera składnika (na przykład nazwy pliku), _splitpath_s przypisuje pusty ciąg do odpowiedniego buforu.

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. 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
_splitpath_s <stdlib.h>
_wsplitpath_s <stdlib.h> lub <wchar.h>

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

Przykład

Zobacz przykład dla elementu , _wmakepath_s._makepath_s

Zobacz też

Obsługa plików
_splitpath, _wsplitpath
_fullpath, _wfullpath
_getmbcp
_makepath, _wmakepath
_setmbcp