_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
包含实际的文件扩展名(带有或不带前导句点 (.))。 如果 ext 中未显示句点,则 _makepath 会自动插入句点。 如果 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 必须不能大于在 Stdlib.h 中定义的 _MAX_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