_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。 有关更多信息,请参见 避免缓冲区溢出。
一般文本例程映射
Tchar.h 实例 |
未定义的 _UNICODE 和 _MBCS |
定义的 _MBCS |
定义的 _UNICODE |
---|---|---|---|
_tmakepath |
_makepath |
_makepath |
_wmakepath |
path 参数必须指向足够大空缓冲区容纳完整路径。 复合 path 大于 _MAX_PATH 串常数必须不,定义在 Stdlib.h。
如果该路径是 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 );
}