다음을 통해 공유


_makepath_s, _wmakepath_s

구성 요소에서 경로 이름을 만듭니다. 이러한 함수는 _makepath 버전, CRT 보안 기능에 설명된 것 처럼 보안 기능이 향상된 _wmakepath입니다.

구문

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 가 누락된 경우 콜론을 복합 경로에 자동으로 삽입합니다. driveNULL 또는 빈 문자열을 가리키는 경우 복합 path 문자열에 드라이브 문자가 나타나지 않습니다.

dir
드라이브 지정자 또는 실제 파일 이름을 제외한 디렉터리의 경로를 포함합니다. 후행 슬래시는 선택 사항이며 슬래시(/) 또는 백슬래시(\) 또는 둘 다 단일 dir 인수에 사용될 수 있습니다. 후행 슬래시(/또는 \)를 지정하지 않으면 자동으로 삽입됩니다. dirNULL이거나 빈 문자열을 가리키는 경우 복합 path 문자열에 디렉터리 경로가 삽입되지 않습니다.

fname
파일 확장명 없이 기본 파일 이름을 포함합니다. fnameNULL이거나 빈 문자열을 가리키는 경우 복합 path 문자열에 파일 이름이 삽입되지 않습니다.

ext
앞에 마침표(.)가 있거나 없는 실제 파일 확장명을 포함합니다. _makepath_s 에 표시되지 않으면 마침표가 자동으로 삽입됩니다 ext. extNULL이거나 빈 문자열을 가리키는 경우 복합 path 문자열에 확장명이 삽입되지 않습니다.

반환 값

성공 시 0이고, 실패 시 오류 코드입니다.

오류 조건

path sizeInWords / sizeInBytes 반환 값 path의 내용
NULL any EINVAL 수정 안 됨
any < = 0 EINVAL 수정 안 됨

위의 오류 조건이 발생하면 이러한 함수는 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용한 경우 errnoEINVAL로 설정되고 함수는 EINVAL을 반환합니다. drive, fnameext 매개 변수에는 NULL이 허용됩니다. 이러한 매개 변수가 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는 Stdlib.h에 정의된 _MAX_PATH 상수보다 크지 않아야 합니다.

경로인 NULL경우 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 또한 errnoEINVAL로 설정됩니다. 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