Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Gere nomes que podem ser usados para criar arquivos temporários. Essas funções são versões e _wtmpnamcom aprimoramentos de tmpnam segurança, conforme descrito em Recursos de segurança no CRT.
Sintaxe
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
Parâmetros
str
[fora] Ponteiro que contém o nome gerado.
sizeInChars
[em] O tamanho do buffer em caracteres.
Valor retornado
Ambas as funções retornarão 0 se tiverem êxito ou um número de erro em caso de falha.
Condições de erro
str |
sizeInChars |
Valor retornado | Conteúdo de str |
|---|---|---|---|
NULL |
any | EINVAL |
não modificado |
não é NULL (aponta para a memória válida) |
muito curto | ERANGE |
não modificado |
Se str for NULL, o manipulador de parâmetro inválido será chamado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, essas funções definirão errno como EINVAL e retornarão EINVAL.
Comentários
Cada uma dessas funções retorna o nome de um arquivo que não existe no momento. tmpnam_s retorna um nome exclusivo no diretório temporário do Windows designado retornado por GetTempPathW. Quando um nome de arquivo é anexado com uma barra invertida e nenhuma informação de caminho, como \fname21, isso indica que o nome é válido para o diretório de trabalho atual.
Para tmpnam_s, é possível armazenar esse nome de arquivo gerado em str. O tamanho máximo de uma cadeia de caracteres retornada por tmpnam_s é L_tmpnam_s, definido em STDIO.H. Se str for NULL, tmpnam_s deixará o resultado em um buffer estático interno. Portanto, todas as chamadas posteriores destroem esse valor. O nome gerado por tmpnam_s consiste em um nome de arquivo gerado pelo programa e, após a primeira chamada para tmpnam_s, uma extensão de arquivo de números sequenciais na base 32 (.1-.1vvvvvu, quando TMP_MAX_S em STDIO. H é INT_MAX).
tmpnam_s manipula automaticamente argumentos da cadeia de caracteres multibyte conforme apropriado, reconhecendo as sequências de caracteres multibyte de acordo com a página de código do OEM obtida do sistema operacional. _wtmpnam_s é uma versão de caractere largo de tmpnam_s; o argumento e o valor retornado de _wtmpnam_s são cadeias de caracteres largos. _wtmpnam_s e tmpnam_s têm comportamento idêntico, exceto pelo fato de que _wtmpnam_s não manipula cadeias de caracteres multibyte.
No C++, o uso dessas funções é simplificado por sobrecargas de modelo. As sobrecargas podem inferir automaticamente o tamanho do buffer, eliminando a necessidade de especificar um argumento de tamanho. Para obter mais informações, consulte Sobrecargas de modelo seguras.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Mapeamentos de rotina de texto genérico
| Rotina TCHAR.H | _UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
|---|---|---|---|
_ttmpnam_s |
tmpnam_s |
tmpnam_s |
_wtmpnam_s |
Requisitos
| Rotina | Cabeçalho necessário |
|---|---|
tmpnam_s |
<stdio.h> |
_wtmpnam_s |
<stdio.h> ou <wchar.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
// 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.