Condividi tramite


tmpnam_s, _wtmpnam_s

Genera nomi utilizzabili per creare i file temporanei. Queste sono versioni di tmpnam and _wtmpnam con miglioramenti di sicurezza come descritto in Funzionalità di sicurezza in CRT.

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

Parametri

  • [out] str
    Puntatore che avrà il nome generato.

  • [in] sizeInChars
    La dimensione del buffer in caratteri.

Valore restituito

Entrambe le funzioni restituiscono 0 in caso di esito positivo oppure un numero di errore in caso di errore.

Condizioni di errore

str

sizeInChars

Valore restituito

Contenuto di str

NULL

any

EINVAL

non modificato

non NULL (punta alla memoria valida)

troppo corto

ERANGE

non modificato

Se str è NULL, viene richiamato il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni impostano errno a EINVAL e restituiscono EINVAL.

Note

Ognuna di queste funzioni restituisce il nome di un file che correntemente non esiste. tmpnam_s restituisce un nome univoco nella cartella di lavoro corrente. È importante notare che quando un file è preceduto da una barra rovesciata e non sono presenti informazioni sul percorso, come \fname21, significa che il nome è valido per la cartella di lavoro corrente.

Per tmpnam_s, è possibile archiviare questo nome file generato in str. La lunghezza massima di una stringa restituita da tmpnam_s è L_tmpnam_s, definito in STDIO.H. Se str è NULL, allora tmpnam_s lascia il risultato in un buffer statico interno. Pertanto tutte le chiamate successive eliminano questo valore. Il nome generato da tmpnam_s consiste in un nome di file generato da un programma e, dopo la prima chiamata a tmpnam_s, un'estensione di file di numeri sequenziali in base 32 (.1-.1vvvvvu, quando TMP_MAX_S in STDIO.H è INT_MAX).

tmpnam_s è gestito automaticamente da argomenti di stringa con caratteri multibyte in modo appropriato, riconoscendo le sequenze di caratteri multibyte in base alla tabella codici OEM ottenuta dal sistema operativo. _wtmpnam_s è una versione a caratteri estesi di tmpnam_s; gli argomenti e i valori restituiti di _wtmpnam_s sono stringhe con caratteri estesi. _wtmpnam_s e tmpnam_s si comportano in modo identico in caso contrario, ma _wtmpnam_s non gestisce le stringhe di caratteri multibyte.

In C++, l'utilizzo di queste funzioni viene semplificato da overload del modello; gli overload possono dedurre la lunghezza del buffer automaticamente, eliminando la necessità di specificare un argomento per la dimensione. Per ulteriori informazioni, vedere Overload di modelli sicuri.

Mapping di routine di testo generico

Routine TCHAR.H

_UNICODE & _MBCS non definiti

_MBCS definito

_UNICODE definito

_ttmpnam_s

tmpnam_s

tmpnam_s

_wtmpnam_s

Requisiti

Routine

Intestazione obbligatoria

tmpnam_s

<stdio.h>

_wtmpnam_s

<stdio.h> o <wchar.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'Introduzione.

Esempio

// 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 );
      }
   }  
}

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

Vedere anche

Riferimenti

I/O di flusso

_getmbcp

malloc

_setmbcp

tmpfile_s