_makepath_s
, _wmakepath_s
Erstellt einen Pfadnamen aus Komponenten Diese Funktionen sind Versionen von _makepath
, _wmakepath
mit Sicherheitsverbesserungen wie unter Sicherheitsfunktionen in der CRT beschrieben.
Syntax
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
Parameter
path
Vollständiger Pfadpuffer
sizeInWords
Größe des Puffers in Worten
sizeInBytes
Größe des -Puffers in Byte.
drive
Enthält einen Buchstaben (A, B usw.) für das gewünschte Laufwerk und einen optionalen nachgestellten Doppelpunkt. _makepath_s
fügt den Doppelpunkt automatisch in den zusammengesetzten Pfad ein, wenn er fehlt. Wenn drive
NULL
darstellt oder auf eine leere Zeichenfolge verweist, erscheint kein Laufwerksbuchstabe in der zusammengesetzten path
-Zeichenfolge.
dir
Enthält den Pfad der Verzeichnisse, ausgenommen die Laufwerkkennzeichner oder den tatsächlichen Dateinamen. Der nachfolgende Schrägstrich ist optional, und entweder ein Schrägstrich (/) oder ein umgekehrter Schrägstrich (\) oder beides können in einem einzigen dir
Argument verwendet werden. Wenn kein nachgestellter Schrägstrich (/ oder \) angegeben ist, wird er automatisch eingefügt. Wenn dir
NULL
ist oder auf eine leere Zeichenfolge verweist, wird kein Verzeichnispfad in die zusammengesetzte path
-Zeichenfolge eingefügt.
fname
Enthält den Basisdateinamen ohne Dateinamenerweiterungen. Wenn fname
NULL
ist oder auf eine leere Zeichenfolge verweist, wird kein Dateiname in die zusammengesetzte path
-Zeichenfolge eingefügt.
ext
Enthält die eigentliche Dateinamenerweiterung mit oder ohne führenden Punkt (.). _makepath_s
fügt den Punkt automatisch ein, wenn er nicht angezeigt ext
wird. Wenn ext
NULL
ist oder auf eine leere Zeichenfolge verweist, wird keine Dateiendung in die zusammengesetzte path
-Zeichenfolge eingefügt.
Rückgabewert
Null, wenn erfolgreich, ein Fehlercode, wenn ein Fehler auftritt.
Fehlerbedingungen
path |
sizeInWords / sizeInBytes |
Return | Inhalt von path |
---|---|---|---|
NULL |
any | EINVAL |
nicht geändert |
any | <= 0 | EINVAL |
nicht geändert |
Wenn eine der oben genannten Fehlerbedingungen auftritt, rufen diese Funktionen den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wird die weitere Ausführung zugelassen, wird errno
auf EINVAL
gesetzt, und die Funktionen geben EINVAL
zurück. NULL
ist für die Parameter drive
, fname
und ext
zulässig. Weitere Informationen zum Verhalten, wenn diese Parameter NULL-Zeiger oder leere Zeichenfolgen sind, finden Sie im Abschnitt „Hinweise“.
Hinweise
Die _makepath_s
-Funktion erstellt eine zusammengesetzte Pfadzeichenfolge aus einzelnen Komponenten. Das Ergebnis wird in path
gespeichert. Der path
kann möglicherweise einen Laufwerkbuchstaben, einen Verzeichnispfad, einen Dateinamen sowie Dateinamenerweiterungen enthalten. _wmakepath_s
ist eine Breitzeichenversion von _makepath_s
. Die Argumente für _wmakepath_s
sind Zeichenfolgen mit Breitzeichen. _wmakepath_s
und _makepath_s
verhalten sich andernfalls identisch.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Mapping generischer Textroutinen
Tchar.h-Routine | _UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
Das path
-Argument muss auf einen leeren Puffer verweisen, der groß genug ist, um den kompletten Pfad zu enthalten. Das kombinierte path
-Argument darf nicht größer sein als die _MAX_PATH
-Konstante, die in „Stdlib.h“ definiert ist.
Wenn der Pfad lautet NULL
, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Darüber hinaus wird errno
auf EINVAL
festgelegt. NULL
-Werte sind für alle anderen Parameter zugelassen.
In C++ wird die Verwendung dieser Funktionen durch Vorlagenüberladungen vereinfacht; die Überladungen können automatisch Rückschlüsse auf die Pufferlänge ziehen (wodurch kein Größenargument mehr angegeben werden muss), und sie können automatisch die älteren, nicht sicheren Funktionen durch ihre neueren, sicheren Entsprechungen ersetzen. Weitere Informationen finden Sie unter Secure Template Overloads.
Die Debugbibliotheksversionen dieser Funktionen füllen zuerst den Puffer mit 0xFE. Verwenden Sie _CrtSetDebugFillThreshold
zum Deaktivieren dieses Verhaltens .
Anforderungen
Routine | Erforderlicher Header |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> oder <wchar.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// 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
Siehe auch
Dateibehandlung
_fullpath
, _wfullpath
_splitpath_s
, _wsplitpath_s
_makepath
, _wmakepath