Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Создает путь из компонентов. Эти функции — это версии с улучшениями безопасности, _wmakepath
как описано в функциях безопасности в CRT._makepath
Синтаксис
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
Параметры
path
Буфер полного пути.
sizeInWords
Размер буфера в словах.
sizeInBytes
Размер буфера в байтах.
drive
Содержит букву (A, B и т. д.), соответствующую требуемому диску, с необязательным двоеточием после нее. _makepath_s
Вставляет двоеточие автоматически в составной путь, если он отсутствует. Если параметр drive
имеет значение NULL
или указывает на пустую строку, в составной строке path
буква диска не отображается.
dir
Содержит путь каталогов, не включая обозначение диска или фактическое имя файла. Косая черта является необязательной, а косая черта (/) или обратная косая черта (\) или оба могут использоваться в одном dir
аргументе. Если косая черта (/ или \) не указана, она вставляется автоматически. Если параметр dir
имеет значение NULL
или указывает на пустую строку, путь каталога не вставляется в составную строку path
.
fname
Содержит базовое имя файла без расширений. Если параметр fname
имеет значение NULL
или указывает на пустую строку, имя файла не вставляется в составную строку path
.
ext
Содержит фактическое расширение имени файла с предшествующей точкой (.) или без нее. _makepath_s
автоматически вставляет период, если он не отображается ext
. Если параметр ext
имеет значение NULL
или указывает на пустую строку, расширение не вставляется в составную строку path
.
Возвращаемое значение
Возвращает нуль в случае успеха или код ошибки в случае неудачи.
Условия ошибок
path |
sizeInWords / sizeInBytes |
Возврат | Содержимое 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
идентично в противном случае.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставления подпрограмм универсального текста
Подпрограмма 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++ использование данных функций упрощено наличием шаблонных перегрузок; перегруженные методы могут автоматически определять длину буфера (что исключает необходимость указания аргумента с размером буфера), а также они могут автоматически заменять более старые, незащищенные функции их новыми безопасными аналогами. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".
Версии библиотек отладки этих функций сначала заполняют буфер 0xFE. Чтобы отключить это поведение, используйте _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 );
}
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
См. также
Обработка файлов
_fullpath
, _wfullpath
_splitpath_s
, _wsplitpath_s
_makepath
, _wmakepath