Udostępnij za pośrednictwem


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 NULLwartość , 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_sprogramu 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_sargument 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.

Zobacz też

We/Wy strumienia
_getmbcp
malloc
_setmbcp
tmpfile_s