tmpnam_s, _wtmpnam_stmpnam_s, _wtmpnam_s

Génèrent des noms que vous pouvez utiliser pour créer des fichiers temporaires.Generate names you can use to create temporary files. Ces versions de tmpnam et _wtmpnam intègrent les améliorations de sécurité décrites dans Fonctionnalités de sécurité dans le CRT.These are versions of tmpnam and _wtmpnam with security enhancements as described in Security Features in the CRT.

SyntaxeSyntax

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

ParamètresParameters

strstr
Pointeur destiné à contenir le nom généré.Pointer that will hold the generated name.

sizeInCharssizeInChars
Taille de la mémoire tampon en caractères.The size of the buffer in characters.

Valeur de retourReturn Value

Ces deux fonctions retournent 0 en cas de réussite ou un numéro d’erreur en cas d’échec.Both of these functions return 0 if successful or an error number on failure.

Conditions d’erreurError Conditions

strstr sizeInCharssizeInChars Valeur de retourReturn Value Contenu de chaîneContents of str
NULLNULL anyany EINVALEINVAL non modifiénot modified
not null (pointe vers une mémoire valide)not NULL (points to valid memory) trop courttoo short ERANGEERANGE non modifiénot modified

Si Str a la valeur null, le gestionnaire de paramètres non valides est appelé, comme décrit dans validation de paramètre.If str is NULL, the invalid parameter handler is invoked, as described in Parameter Validation. Si l’exécution est autorisée à se poursuivre, ces fonctions définissent errno sur EINVAL et retournent EINVAL.If execution is allowed to continue, these functions set errno to EINVAL and return EINVAL.

NotesRemarks

Chacune de ces fonctions retourne le nom d’un fichier qui n’existe pas actuellement.Each of these functions returns the name of a file that does not currently exist. tmpnam_s retourne un nom unique dans le répertoire temporaire Windows désigné renvoyé par GetTempPathW.tmpnam_s returns a name unique in the designated Windows temporary directory returned by GetTempPathW. Notez que lorsqu’un nom de fichier est précédé d’une barre oblique inverse et d’aucune information de chemin, comme \fname21, cela indique que le nom est valide pour le répertoire de travail actif.Note than when a file name is pre-pended with a backslash and no path information, such as \fname21, this indicates that the name is valid for the current working directory.

Pour tmpnam_s, vous pouvez stocker ce nom de fichier généré dans Str.For tmpnam_s, you can store this generated file name in str. La longueur maximale d’une chaîne retournée par tmpnam_s est L_tmpnam_s, définie dans stdio. Manutention.The maximum length of a string returned by tmpnam_s is L_tmpnam_s, defined in STDIO.H. Si Str a la valeur null, tmpnam_s laisse le résultat dans une mémoire tampon statique interne.If str is NULL, then tmpnam_s leaves the result in an internal static buffer. Par conséquent, tous les appels suivants détruisent cette valeur.Thus any subsequent calls destroy this value. Le nom généré par tmpnam_s se compose d’un nom de fichier généré par le programme et, après le premier appel à tmpnam_s, une extension de fichier de nombres séquentiels dans la base 32 (. 1-. 1vvvvvu, lorsque TMP_MAX_S dans stdio. H est INT_MAX).The name generated by tmpnam_s consists of a program-generated file name and, after the first call to tmpnam_s, a file extension of sequential numbers in base 32 (.1-.1vvvvvu, when TMP_MAX_S in STDIO.H is INT_MAX).

tmpnam_s gère automatiquement les arguments de chaîne de caractères multioctets comme il convient, en identifiant les séquences de caractères multioctets en fonction de la page de codes OEM obtenue du système d’exploitation.tmpnam_s automatically handles multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the OEM code page obtained from the operating system. _wtmpnam_s est une version à caractères larges de tmpnam_s; l’argument et la valeur de retour de _wtmpnam_s sont des chaînes à caractères larges._wtmpnam_s is a wide-character version of tmpnam_s; the argument and return value of _wtmpnam_s are wide-character strings. _wtmpnam_s et tmpnam_s se comportent de la même manière, sauf que _wtmpnam_s ne gère pas les chaînes de caractères multioctets._wtmpnam_s and tmpnam_s behave identically except that _wtmpnam_s does not handle multibyte-character strings.

En C++, l’utilisation de ces fonctions est simplifiée par les surcharges de modèle ; celles-ci peuvent déduire automatiquement la longueur de la mémoire tampon, ce qui évite d’avoir à spécifier un argument de taille.In C++, using these functions is simplified by template overloads; the overloads can infer buffer length automatically, eliminating the need to specify a size argument. Pour plus d'informations, consultez Secure Template Overloads.For more information, see Secure Template Overloads.

Mappages de routines de texte génériqueGeneric-Text Routine Mappings

Routine TCHAR.HTCHAR.H routine _UNICODE et _MBCS non définis_UNICODE & _MBCS not defined _MBCS défini_MBCS defined _UNICODE défini_UNICODE defined
_ttmpnam_s_ttmpnam_s tmpnam_stmpnam_s tmpnam_stmpnam_s _wtmpnam_s_wtmpnam_s

Configuration requiseRequirements

RoutineRoutine En-tête requisRequired header
tmpnam_stmpnam_s <stdio.h><stdio.h>
_wtmpnam_s_wtmpnam_s <stdio.h> ou <wchar.h><stdio.h> or <wchar.h>

Pour plus d'informations sur la compatibilité, voir Compatibilité.For additional compatibility information, see Compatibility.

ExempleExample

// 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.

Voir aussiSee also

E/S de fluxStream I/O
_getmbcp_getmbcp
mallocmalloc
_setmbcp_setmbcp
tmpfile_stmpfile_s