_makepath_s
, _wmakepath_s
Tworzy nazwę ścieżki na podstawie składników. Te funkcje to wersje programu _makepath
_wmakepath
z 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 |
Powrót | 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
, fname
i 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_s
argumenty, 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 zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_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 EINVAL
wartość . 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