_makepath
, _wmakepath
從元件建立路徑名稱。 這些函式已有更安全的版本可用,請參閱 _makepath_s
、_wmakepath_s
。
語法
void _makepath(
char *path,
const char *drive,
const char *dir,
const char *fname,
const char *ext
);
void _wmakepath(
wchar_t *path,
const wchar_t *drive,
const wchar_t *dir,
const wchar_t *fname,
const wchar_t *ext
);
參數
path
完整路徑緩衝區。
drive
包含對應至所需磁碟機的代號 (A、B 等) 及選擇性後置冒號。 _makepath
如果遺漏冒號,就會自動在複合路徑中插入冒號。 如果 drive
為 NULL
或指向空字串,複合 path
字串中就不會出現磁碟機代號。
dir
包含目錄路徑,但不包含磁碟機指示項或實際檔案名稱。 尾端斜線是選擇性的,而正斜線 (/
) 或反斜杠 (\
) 或兩者都可用於單 dir
一自變數。 如果未指定尾端斜線 (/
或 \
),則會自動插入。 如果 dir
為 NULL
或指向空字串,複合 path
字串中就不會插入目錄路徑。
fname
包含基底檔案名稱,但不包含任何副檔名。 如果 fname
為 NULL
或指向空字串,複合 path
字串中就不會插入檔名。
ext
包含具有或不含前置句號的實際擴展名(.
)。 _makepath
如果期間未出現在 中 ext
,則會自動插入句點。 如果 ext
為 NULL
或指向空字串,複合 path
字串中就不會插入副檔名。
備註
_makepath
函式會從個別元件建立複合路徑字串,並將結果儲存在 path
中。 path
可能包含磁碟機代號、目錄路徑、檔名和副檔名。 _wmakepath
是 _makepath
的寬字元版本; _wmakepath
的引數是寬字元字串。 否則,_wmakepath
和 _makepath
的行為即會相同。
安全性提示:使用以 Null 結束的字串。 為了避免緩衝區溢位,以 Null 結束的字串不得超過 path
緩衝區的大小。 _makepath
不會確保複合路徑字串的長度不會超過 _MAX_PATH
。 如需詳細資訊,請參閱 Avoiding Buffer Overruns (避免緩衝區滿溢)。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
一般文字常式對應
Tchar.h 常式 | _UNICODE 和 _MBCS 未定義 |
_MBCS 已定義 |
_UNICODE 已定義 |
---|---|---|---|
_tmakepath |
_makepath |
_makepath |
_wmakepath |
path
引數必須指向大小足以容納完整路徑的空白緩衝區。 複合 path
不得大於 _MAX_PATH
常數 (定義於 Stdlib.h 中)。
如果path為 NULL
,則會叫用無效的參數處理程式,如參數驗證中所述。 此外,errno
會設定為 EINVAL
。 所有其他參數都可使用 NULL
值。
需求
常式 | 必要的標頭 |
---|---|
_makepath |
<stdlib.h> |
_wmakepath |
<stdlib.h> 或 <wchar.h> |
如需相容性詳細資訊,請參閱相容性。
範例
// crt_makepath.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];
_makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" ); // C4996
// Note: _makepath is deprecated; consider using _makepath_s instead
printf( "Path created with _makepath: %s\n\n", path_buffer );
_splitpath( path_buffer, drive, dir, fname, ext ); // C4996
// Note: _splitpath is deprecated; consider using _splitpath_s instead
printf( "Path extracted with _splitpath:\n" );
printf( " Drive: %s\n", drive );
printf( " Dir: %s\n", dir );
printf( " Filename: %s\n", fname );
printf( " Ext: %s\n", ext );
}
Path created with _makepath: c:\sample\crt\makepath.c
Path extracted with _splitpath:
Drive: c:
Dir: \sample\crt\
Filename: makepath
Ext: .c
另請參閱
檔案處理
_fullpath
, _wfullpath
_splitpath
, _wsplitpath
_makepath_s
, _wmakepath_s