tmpnam_s
, _wtmpnam_s
Wygeneruj nazwy, których można użyć do tworzenia plików tymczasowych. Te funkcje to wersje funkcji tmpnam
i _wtmpnam
z ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
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
Parametry
str
[out] Wskaźnik zawierający wygenerowaną nazwę.
sizeInChars
[in] Rozmiar buforu w znakach.
Wartość zwracana
Obie te funkcje zwracają wartość 0, jeśli operacja zakończyła się powodzeniem lub numerem błędu w przypadku błędu.
Warunki błędu
str |
sizeInChars |
Wartość zwracana | Zawartość str |
---|---|---|---|
NULL |
dowolny | EINVAL |
niezmodyfikowane |
not NULL (wskazuje prawidłową pamięć) |
za krótki | ERANGE |
niezmodyfikowane |
Jeśli str
parametr ma NULL
wartość , wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, te funkcje są ustawione errno
na EINVAL
i zwracają wartość EINVAL
.
Uwagi
Każda z tych funkcji zwraca nazwę pliku, który obecnie nie istnieje. tmpnam_s
Zwraca nazwę unikatową w wyznaczonym katalogu tymczasowym systemu Windows zwróconym przez GetTempPathW
. Gdy nazwa pliku jest poprzedzana ukośnikiem odwrotnym i nie ma informacji o ścieżce, takich jak \fname21
, wskazuje, że nazwa jest prawidłowa dla bieżącego katalogu roboczego.
W przypadku tmpnam_s
programu można przechowywać tę wygenerowaną nazwę pliku w pliku str
. Maksymalna długość ciągu zwracanego przez tmpnam_s
element to L_tmpnam_s
, zdefiniowany w pliku STDIO.H. Jeśli str
wartość to NULL
, tmpnam_s
spowoduje to pozostawienie wyniku w wewnętrznym buforze statycznym. W związku z tym wszelkie kolejne wywołania zniszczą tę wartość. Nazwa wygenerowana przez tmpnam_s
program składa się z nazwy pliku wygenerowanego przez program i, po pierwszym wywołaniu metody tmpnam_s
, rozszerzenie pliku kolejnych numerów w bazie 32 (.1-.1vvvvvu, gdy TMP_MAX_S
w STDIO. H to INT_MAX
).
tmpnam_s
automatycznie obsługuje odpowiednio argumenty ciągu wielobajtowego, rozpoznając sekwencje znaków wielobajtowych zgodnie ze stroną kodową producenta OEM uzyskaną z systemu operacyjnego. _wtmpnam_s
jest wersją szerokoznakową ; tmpnam_s
argument i wartość zwracana _wtmpnam_s
są ciągami o szerokim znaku. _wtmpnam_s
i tmpnam_s
zachowują się identycznie, z tą różnicą, że _wtmpnam_s
nie obsługuje ciągów wielobajtowych znaków.
W języku C++używanie tych funkcji jest uproszczone przez przeciążenia szablonu; przeciążenia mogą automatycznie wnioskować długość buforu, eliminując konieczność określenia argumentu rozmiaru. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Mapowania procedur tekstu ogólnego
Procedura TCHAR.H | _UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_ttmpnam_s |
tmpnam_s |
tmpnam_s |
_wtmpnam_s |
Wymagania
Procedura | Wymagany nagłówek |
---|---|
tmpnam_s |
<stdio.h> |
_wtmpnam_s |
<stdio.h> lub <wchar.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// 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.