共用方式為


tmpnam_s、_wtmpnam_s

產生您可以使用於建立暫存檔的名稱。 這些是 tmpnam and _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

any

EINVAL

未修改

不是 NULL (指向有效的記憶體)

太短

ERANGE

未修改

如果 str 是 NULL,則叫用無效參數處理常式,如 參數驗證 中所述。 如果允許繼續執行,這些函式會將 errno 設定為 EINVAL 並傳回 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