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 |
any | EINVAL |
nicht geändert |
nicht NULL (verweist auf gültigen Speicher) |
zu kurz | ERANGE |
nicht geändert |
Wenn str
den Wert NULL
annimmt, wird der Handler für ungültige Parameter aufgerufen, wie in Parameter Validation. 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 str
NULL
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_s
eine 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 Secure Template Overloads.
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 |
---|---|---|---|
_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.