Freigeben über


_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 driveNULL 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 dirNULL 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 fnameNULL 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 extwird. Wenn extNULL 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 _CrtSetDebugFillThresholdzum 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