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,不正確的參數處理常式會叫用,如所述參數驗證。如果執行,則允許繼續執行,這些函式會設定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 時TMP_MAX_S STDIO 中。H 為 INT_MAX)。
tmpnam_s會自動處理多位元組字元字串引數視需要辨識多位元組字元順序,根據取自作業系統的 OEM 字碼頁。_wtmpnam_s寬字元版本的tmpnam_s。 引數和傳回值的_wtmpnam_s是寬字元字串。_wtmpnam_s與tmpnam_s運作方式完全相同,除了_wtmpnam_s不處理多位元組字元字串。
在 C++ 中,使用這些函式已經過簡化的樣板的多載 ; 多載可以緩衝區長度自動推斷,而不必指定 size 引數。如需詳細資訊,請參閱 安全範本多載。
泛用文字常式對應
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。 如需詳細資訊,請參閱平台叫用範例。