Поделиться через


_makepath_s, _wmakepath_s

Создает путь из компонентов. Эти функции — это версии с улучшениями безопасности,_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