Share via


_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 如果遺漏冒號,就會自動在複合路徑中插入冒號。 如果 driveNULL 或指向空字串,複合 path 字串中就不會出現磁碟機代號。

dir
包含目錄路徑,但不包含磁碟機指示項或實際檔案名稱。 尾端斜線是選擇性的,而正斜線 ( / ) 或反斜線 ( \ ) 或兩者都可用於單 dir 一引數。 如果未指定尾端斜線 ( /\ ),則會自動插入。 如果 dirNULL 或指向空字串,複合 path 字串中就不會插入目錄路徑。

fname
包含基底檔案名稱,但不包含任何副檔名。 如果 fnameNULL 或指向空字串,複合 path 字串中就不會插入檔名。

ext
包含具有或不含前置句號的實際副檔名( . )。 _makepath 如果期間未出現在 中 ext ,則會自動插入句點。 如果 extNULL 或指向空字串,複合 path 字串中就不會插入副檔名。

備註

_makepath 函式會從個別元件建立複合路徑字串,並將結果儲存在 path 中。 path 可能包含磁碟機代號、目錄路徑、檔名和副檔名。 _wmakepath_makepath的寬字元版本; _wmakepath 的引數是寬字元字串。 否則,_wmakepath_makepath 的行為即會相同。

安全性提示:使用以 Null 結束的字串。 為了避免緩衝區溢位,以 Null 結束的字串不得超過 path 緩衝區的大小。 _makepath 不會確保複合路徑字串的長度不會超過 _MAX_PATH 。 如需詳細資訊,請參閱 避免緩衝區滿溢

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 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