_makepath_s _wmakepath_s
從元件中建立的路徑名稱。 這些是舊版 _makepath、 _wmakepath 中所述的安全性增強功能與安全性功能,則在 CRT 中。
errno_t _makepath_s(
char *path,
size_t sizeInBytes,
const char *drive,
const char *dir,
const char *fname,
const char *ext
);
errno_t _wmakepath_s(
wchar_t *path,
size_t sizeInWords,
const wchar_t *drive,
const wchar_t *dir,
const wchar_t *fname,
const wchar_t *ext
);
template <size_t size>
errno_t _makepath_s(
char (&path)[size],
const char *drive,
const char *dir,
const char *fname,
const char *ext
); // C++ only
template <size_t size>
errno_t _wmakepath_s(
wchar_t (&path)[size],
const wchar_t *drive,
const wchar_t *dir,
const wchar_t *fname,
const wchar_t *ext
); // C++ only
參數
[out] path
完整路徑的緩衝區。[in] sizeInWords
在文字緩衝區的大小。[in] sizeInBytes
緩衝區的大小以位元組為單位。[in] drive
包含字母 (A、 B 等等) 對應到您想要的磁碟機,並選擇性的後端冒號。 _makepath_s如果遺失,請自動插入複合路徑中的冒號。 如果drive是NULL點設為空字串,沒有磁碟機代號會顯示在複合稿或path的字串。[in] dir
包含不包括磁碟機指定代碼或實際的檔名的目錄路徑。 結尾的斜線是選擇性的且正斜線 (/) 或反斜線 (\),或兩者皆可能用於單一dir引數。 如果結尾沒有斜線 (/ 或 \) 指定,則它會自動插入。 如果dir是NULL或複合稿在插入點設為空字串,而沒有目錄路徑path的字串。[in] fname
包含的主檔名,沒有任何檔案的副檔名。 如果fname是NULL或複合稿在插入點設為空字串,而沒有檔名path的字串。[in] ext
包含實際的檔案名稱副檔名,不論有前置句號 (.)。 _makepath_s自動插入期間,如果它不會出現在ext。 如果ext是NULL的複合稿在插入點設為空字串,而沒有副檔名或path的字串。
傳回值
如果成功 ;,零 錯誤碼錯誤所致。
錯誤狀況
path |
sizeInWords / sizeInBytes |
Return |
內容path |
---|---|---|---|
NULL |
任何 |
EINVAL |
不能修改 |
任何 |
< = 0 |
EINVAL |
不能修改 |
如果任何上述的錯誤狀況發生時,這些函式叫用無效的參數處理常式中,如所述參數驗證。 如果要繼續,請允許執行errno設定為 [EINVAL和函式會傳回EINVAL**.** NULL允許參數的drive, fname,以及ext。 有關的行為時這些參數是 null 指標或空字串,請參閱 < 備註 > 一節。
備註
_makepath_s函式會建立複合路徑字串從個別的元件,並且在將結果儲存path。 path可能包括磁碟機代號、 目錄路徑、 檔名和副檔名。 _wmakepath_s寬字元版本的**_makepath_s**。 引數去**_wmakepath_s是寬字元字串。 _wmakepath_s與_makepath_s**其他方式完全相同。
泛用文字常式對應
Tchar.h 常式 |
_Unicode 之後,未定義的 _MBCS |
定義的 _MBCS |
定義 _unicode 之後 |
---|---|---|---|
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
path引數必須指向一個空的緩衝區不夠大,無法容納的完整路徑。 綜合path必須不大於_MAX_PATH Stdlib.h 中定義的常數。
如果路徑為NULL,不正確的參數處理常式會叫用,如所述參數驗證。 此外, errno設定為 [ EINVAL。 NULL針對所有其他參數允許的值。
在 C++ 中,使用這些函式已經過簡化的樣板的多載 ; 多載可以自動推斷緩衝區長度 (而不必指定 size 引數),它們可以自動取代較舊的、 不安全的函式與其較新的、 安全的對應項目。 如需詳細資訊,請參閱 安全範本多載。
這些函式的偵錯版本第一次填滿與 0xFD 的緩衝區。 若要停用這種情形,請使用_CrtSetDebugFillThreshold。
需求
常式 |
所需的標頭 |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> 或者 <wchar.h> |
如需相容性資訊,請參閱相容性在簡介中。
範例
// crt_makepath_s.c
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
errno_t err;
err = _makepath_s( path_buffer, _MAX_PATH, "c", "\\sample\\crt\\",
"crt_makepath_s", "c" );
if (err != 0)
{
printf("Error creating path. Error code %d.\n", err);
exit(1);
}
printf( "Path created with _makepath_s: %s\n\n", path_buffer );
err = _splitpath_s( path_buffer, drive, _MAX_DRIVE, dir, _MAX_DIR, fname,
_MAX_FNAME, ext, _MAX_EXT );
if (err != 0)
{
printf("Error splitting the path. Error code %d.\n", err);
exit(1);
}
printf( "Path extracted with _splitpath_s:\n" );
printf( " Drive: %s\n", drive );
printf( " Dir: %s\n", dir );
printf( " Filename: %s\n", fname );
printf( " Ext: %s\n", ext );
}
Output
Path created with _makepath_s: c:\sample\crt\crt_makepath_s.c
Path extracted with _splitpath_s:
Drive: c:
Dir: \sample\crt\
Filename: crt_makepath_s
Ext: .c