_makepath_s, _wmakepath_s
Erstellt einen Pfadnamen der Komponenten.Dies sind Versionen von _makepath, _wmakepath mit beschrieben, wie unter Security Enhancements in Sicherheitsfeatures im CRT.
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
[out] path
Puffer des vollständigen Pfads.[in] sizeInWords
Größe des Puffers in den Wörtern.[in] sizeInBytes
Größe des Puffers in Byte.[in] drive
Enthält einen Buchstaben (A, B usw.) entsprechend dem gewünschten Laufwerk und einem optionalen nachgestellten Doppelpunkt._makepath_s fügt den Doppelpunkt automatisch in den zusammengesetzten Pfad ein, wenn er fehlt.Wenn driveNULL ist oder eine leere Zeichenfolge zeigt, wird kein Laufwerkbuchstabe in der zusammengesetzten path Zeichenfolge.[in] dir
Enthält den Pfad von Verzeichnissen, ohne den Laufwerkbezeichner oder den tatsächlichen Dateinamen.Der nachfolgende Schrägstrich ist optional und entweder ein Schrägstrich (/) oder ein umgekehrter Schrägstrich (\) oder beides werden in einem einzelnen dir-Argument verwendet werden.Wenn kein nachgestellter Schrägstrich (/oder \) angegeben, wird er automatisch eingefügt.Wenn dirNULL ist oder eine leere Zeichenfolge zeigt, wird kein Verzeichnispfad in die zusammengesetzte path Zeichenfolge eingefügt.[in] fname
Enthält den Basisdateinamen ohne Dateinamenerweiterungen.Wenn fnameNULL ist oder eine leere Zeichenfolge zeigt, wird kein Dateiname in die zusammengesetzte path Zeichenfolge eingefügt.[in] ext
Enthält die tatsächliche Dateinamenerweiterung (mit oder ohne einen führenden Punkt (.)._makepath_s fügt automatisch den Punkt ein, wenn es nicht in extangezeigt wird.Wenn extNULL ist oder eine leere Zeichenfolge zeigt, wird keine Erweiterung in die zusammengesetzte path Zeichenfolge eingefügt.
Rückgabewert
Beliebige wenn erfolgreich; Fehlercode ein Fehler auf.
Fehlerbedingungen
path |
sizeInWords / sizeInBytes |
Return |
Inhalt von path |
---|---|---|---|
NULL |
alle |
EINVAL |
nicht geändert |
alle |
<= 0 |
EINVAL |
nicht geändert |
Wenn eine der oben genannten Fehlerzuständen, wird diese Funktionen aufrufen ungültige Parameter für ein, wie in Parametervalidierungbeschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, wird errno zuEINVAL festgelegt, und die Funktionenvorhanden sindEINVAL**.** NULL wird berücksichtigt die Parameter drive, fnameund extzurück.Weitere Informationen über das Verhalten, wenn diese Parameter NULL-Zeiger oder leere Zeichenfolgen sind, finden Sie im Abschnitt " Hinweise ".
Hinweise
Die _makepath_s-Funktion erstellt eine zusammengesetzte Pfadzeichenfolge von den einzelnen Komponenten und speichert das Ergebnis in path.path könnte einen Laufwerkbuchstaben, einen Verzeichnispfad, einen Dateinamen und eine Dateinamenerweiterung ein._wmakepath_s ist eine Breitzeichen-Version von _makepath_s. _wmakepath_s sind die Argumente für Zeichenfolgen mit Breitzeichen._wmakepath_s und _makepath_s verhalten sich ansonsten unterscheiden.
Zuweisung generischer Textroutinen
Tchar.h-Routine |
_UNICODE als auch _MBCS nicht definiert |
_MBCS definieren |
_UNICODE definiert |
---|---|---|---|
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
Das path-Argument muss zu einem leeren Puffer ausreichend verweisen, der den vollständigen Pfad enthalten groß ist.Zusammengesetzte path muss nicht größer als die _MAX_PATH Konstante sein, definiert in Stdlib.h.
Wenn Pfad NULLungültige Parameter ist, wird der Ereignishandler aufgerufen, wie in Parametervalidierungbeschrieben.Außerdem wird errno zu EINVALfestgelegt.NULL-Werte werden für alle anderen Parameter zulässt.
In C++ unter Verwendung dieser Funktionen wird von Vorlagen Operatoren vereinfacht. Die Überladungen können die Pufferlänge (die Anforderung automatisch beseitigend ableiten, die ein Argument angegeben) und können nicht-sicheren, die älteren Funktionen über ihre Äquivalente sicheren, aktuelleren automatisch ersetzen.Weitere Informationen finden Sie unter Speichern Sie Vorlagen-Überladungen.
Die Debugversionen dieser Funktionen geben zuerst den Puffer mit 0xFD aus.Um dieses Verhalten zu deaktivieren, verwenden Sie _CrtSetDebugFillThreshold.
Anforderungen
Routine |
Erforderlicher Header |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> oder <wchar.h> |
Weitere Informationen finden Sie unter Kompatibilität Kompatibilität in der Einführung.
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 );
}
Output
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