tmpnam_s, _wtmpnam_s

生成可用于创建临时文件的名称。 这些是 tmpnam 和 _wtmpnam 的版本与安全增强的 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

参数

  • [out] str
    将保存生成的名称的指针。

  • [in] sizeInChars
    缓冲区的大小 (以字符 "

返回值

这两个函数返回 0; 如果成功或失败的一个错误号。

错误状态

str

sizeInChars

返回值

目录 str

NULL

任何

EINVAL

不修改

不是 NULL (指向有效的内存)

太短

ERANGE

不修改

如果 str 是 NULL,无效参数调用处理程序,如 参数验证所述。 如果执行允许继续,对 EINVAL 的这些功能集 errno 和返回 EINVAL。

备注

这些功能中的每一个返回当前不存在文件的名称。 tmpnam_s 返回名称仅在当前工作目录。 说明相比,在文件名预置带有一个反斜杠和无路径信息,如 \ fname21,则时指示该名称为当前工作目录是有效的。

对于 tmpnam_s,可以在 str可以将此生成的文件名。 tmpnam_s 返回的字符串的最大长度为 L_tmpnam_s,定义在 STDIO.H。 如果 str 是 NULL,则 tmpnam_s 在内部静态缓冲区以将结果保留。 这样的任何后续调用销毁此值。 tmpnam_s 生成的名称包含一个过程生成的文件名,,在第一次调用 tmpnam_s后,序号文件扩展名在基础 32 (.1-.1vvvvvu 的,那么,当在 STDIO.H 的 TMP_MAX_S 是 INT_MAX 时)。

自动tmpnam_s 处理多字节字符串参数根据需要,识别多字节字符序列根据操作系统获得的 OEM 代码页。 _wtmpnam_s 是 tmpnam_s的宽字符版本;参数和返回 _wtmpnam_s 的值是宽字符字符串。 _wtmpnam_s 和 tmpnam_s 具有相同的行为,但 _wtmpnam_s 不处理多字节字符字符串。

在 C++ 中,使用这些功能由模板重载简化;重载可以自动推断缓冲区长度,而无需指定范围参数。 有关更多信息,请参见 安全模板重载

一般文本例程映射

TCHAR.H 实例

未定义的 _UNICODE _MBCS

定义的 _MBCS

定义的 _UNICODE

_ttmpnam_s

tmpnam_s

tmpnam_s

_wtmpnam_s

要求

实例

必需的头

tmpnam_s

stdio.h

_wtmpnam_s

stdio.h 或 wchar.h

有关其他的兼容性信息,请参见中介绍的 兼容性

示例

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

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例

请参见

参考

流I/O

_getmbcp

malloc

_setmbcp

tmpfile_s