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.