tmpnam_s, _wtmpnam_s
Generare nomi che è possibile utilizzare per creare i file temporanei.queste sono versioni di tmpnam e _wtmpnam con i miglioramenti della 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 utilizzerà il nome generato.[in] sizeInChars
La dimensione del buffer in caratteri.
Valore restituito
Restituiscono 0 di entrambe le funzioni 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 |
qualsiasi |
EINVAL |
non modificato |
non NULL (punta alla memoria valida) |
troppo breve |
ERANGE |
non modificato |
se str viene NULL, il gestore non valido di parametro viene richiamato, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, queste funzioni impostate errno in EINVAL e restituiscono EINVAL.
Note
Ognuna di queste funzioni restituisce il nome di un file correntemente non esiste.tmpnam_s restituisce un nome univoco nella cartella di lavoro corrente.È importante notare che quando un nome file è in generale con una barra rovesciata e senza 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 viene L_tmpnam_s, definito in STDIO.H.se str viene NULL, quindi tmpnam_s consente al risultato in un buffer statico interno.Pertanto tutte le chiamate successive elimina questo valore.Il nome generato da tmpnam_s è costituito da un nome file programma-generato e, dopo la prima chiamata a tmpnam_s, un'estensione di file dei numeri sequenziali in base 32 (.1-.1vvvvvu, quando TMP_MAX_S in STDIO.H è INT_MAX).
tmpnam_s gestisce automaticamente gli argomenti della stringa con caratteri multibyte in base alle proprie esigenze, riconoscere 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; l'argomento e il valore restituito di _wtmpnam_s sono le stringhe di caratteri estesi._wtmpnam_s e tmpnam_s comportano in modo identico con la differenza che _wtmpnam_s non gestisce le stringhe di caratteri multibyte.
In C++, utilizzando queste funzioni è semplificato dagli overload del modello; gli overload possono dedurre la lunghezza del buffer automaticamente, eliminando la necessità di specificare un argomento di dimensione.Per ulteriori informazioni, vedere Assicurarsi che gli overload del modello.
Mapping di routine a testo generico
routine di TCHAR.H |
_UNICODE & _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_ttmpnam_s |
tmpnam_s |
tmpnam_s |
_wtmpnam_s |
Requisiti
routine |
Intestazione di associazione |
---|---|
tmpnam_s |
<stdio.h> |
_wtmpnam_s |
<stdio.h> o <wchar.h> |
per informazioni di compatibilità aggiuntive, 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 c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.