Share via


tmpnam_s, _wtmpnam_s

Generiert Namen, die Sie verwenden können, um temporäre Dateien zu erstellen. Diese Funktionen sind Versionen von tmpnam und _wtmpnam mit Sicherheitsverbesserungen, wie in den Sicherheitsfeatures im CRT beschrieben.

Syntax

errno_t tmpnam_s(
   char * str,
   size_t sizeInChars
);
errno_t _wtmpnam_s(
   wchar_t *str,
   size_t sizeInChars
);
template <size_t size>
errno_t tmpnam_s(
   char (&str)[size]
); // C++ only
template <size_t size>
errno_t _wtmpnam_s(
   wchar_t (&str)[size]
); // C++ only

Parameter

str
[out] Zeiger, der den generierten Namen enthält.

sizeInChars
[in] Die Größe des Puffers in Zeichen.

Rückgabewert

Beide Funktionen geben bei Erfolg 0 zurück und bei einem Fehler eine Fehlernummer zurück.

Fehlerbedingungen

str sizeInChars Rückgabewert Inhalt von str
NULL Beliebig EINVAL nicht geändert
nicht NULL (verweist auf gültigen Speicher) zu kurz ERANGE nicht geändert

Ist str dies NULLder Fehler, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, stellen diese Funktionen errno auf EINVAL ein und geben EINVAL zurück.

Hinweise

Jede dieser Funktionen gibt den Namen einer Datei zurück, die derzeit nicht vorhanden ist. tmpnam_s gibt einen eindeutigen Namen im angegebenen temporären Windows-Verzeichnis zurück, das von GetTempPathW. Wenn ein Dateiname einem umgekehrten Schrägstrich vorangestellt ist und keine Pfadinformationen vorhanden sind, z \fname21. B. gibt er an, dass der Name für das aktuelle Arbeitsverzeichnis gültig ist.

Für tmpnam_s können Sie diesen generierten Dateinamen in str speichern. Die maximale Länge einer Zeichenfolge, die von tmpnam_s zurückgegeben wird, ist L_tmpnam_s, definiert in STDIO.H. Wenn strNULL ist, dann hinterlässt tmpnam_s das Ergebnis in einem internen statischen Puffer. Alle nachfolgenden Aufrufe zerstören deshalb diesen Wert. Der von tmpnam_s einem Programm generierte Name besteht aus einem programmgenerierten Dateinamen und nach dem ersten Aufruf tmpnam_seine Dateierweiterung sequenzieller Nummern in Base 32 (.1-.1vvvvvu, in TMP_MAX_S STDIO). H ist INT_MAX).

tmpnam_s behandelt Multibyte-Zeichenfolgenargumente automatisch als richtig. Die Erkennung von Multibyte-Zeichenfolgen erfolgt auf der Grundlage der Codepage des OEM aus dem Betriebssystem. _wtmpnam_s ist eine Breitzeichenversion von tmpnam_s. Das Argument und der Rückgabewert von _wtmpnam_s sind Zeichenfolgen mit Breitzeichen. _wtmpnam_s und tmpnam_s verhalten sich identisch, mit der Ausnahme, dass _wtmpnam_s multibyte-Zeichenfolgen nicht behandelt werden.

Die Verwendung dieser Funktionen in C++ wird durch Überladungen (als Vorlagen vorhanden) vereinfacht. Überladungen können automatisch die Pufferlänge ableiten, sodass kein Größenargument angegeben werden muss. Weitere Informationen finden Sie unter "Sichere Vorlagenüberladungen".

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Generische Textroutinzuordnungen

TCHAR.H-Routine _UNICODE und _MBCS nicht definiert _MBCS Definiert _UNICODE Definiert
_ttmpnam_s tmpnam_s tmpnam_s _wtmpnam_s

Anforderungen

Routine Erforderlicher Header
tmpnam_s <stdio.h>
_wtmpnam_s <stdio.h> oder <wchar.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

// crt_tmpnam_s.c
// This program uses tmpnam_s to create a unique filename in the
// current working directory.
//

#include <stdio.h>
#include <stdlib.h>

int main( void )
{
   char name1[L_tmpnam_s];
   errno_t err;
   int i;

   for (i = 0; i < 15; i++)
   {
      err = tmpnam_s( name1, L_tmpnam_s );
      if (err)
      {
         printf("Error occurred creating unique filename.\n");
         exit(1);
      }
      else
      {
         printf( "%s is safe to use as a temporary file.\n", name1 );
      }
   }
}
C:\Users\LocalUser\AppData\Local\Temp\u19q8.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.1 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.2 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.3 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.4 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.5 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.6 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.7 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.8 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.9 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.a is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.b is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.c is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.d is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.e is safe to use as a temporary file.

Siehe auch

Stream-E/A
_getmbcp
malloc
_setmbcp
tmpfile_s