_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
가 누락된 경우 콜론을 복합 경로에 자동으로 삽입합니다. drive
가 NULL
또는 빈 문자열을 가리키는 경우 복합 path
문자열에 드라이브 문자가 나타나지 않습니다.
dir
드라이브 지정자 또는 실제 파일 이름을 제외한 디렉터리의 경로를 포함합니다. 후행 슬래시는 선택 사항이며 슬래시(/) 또는 백슬래시(\) 또는 둘 다 단일 dir
인수에 사용될 수 있습니다. 후행 슬래시(/또는 \)를 지정하지 않으면 자동으로 삽입됩니다. dir
이 NULL
이거나 빈 문자열을 가리키는 경우 복합 path
문자열에 디렉터리 경로가 삽입되지 않습니다.
fname
파일 확장명 없이 기본 파일 이름을 포함합니다. fname
이 NULL
이거나 빈 문자열을 가리키는 경우 복합 path
문자열에 파일 이름이 삽입되지 않습니다.
ext
앞에 마침표(.)가 있거나 없는 실제 파일 확장명을 포함합니다. _makepath_s
에 표시되지 않으면 마침표가 자동으로 삽입됩니다 ext
. ext
가 NULL
이거나 빈 문자열을 가리키는 경우 복합 path
문자열에 확장명이 삽입되지 않습니다.
반환 값
성공 시 0이고, 실패 시 오류 코드입니다.
오류 조건
path |
sizeInWords / sizeInBytes |
반환 값 | path 의 내용 |
---|---|---|---|
NULL |
any | EINVAL |
수정 안 됨 |
any | < = 0 | EINVAL |
수정 안 됨 |
위의 오류 조건이 발생하면 이러한 함수는 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용한 경우 errno
는 EINVAL
로 설정되고 함수는 EINVAL
을 반환합니다. drive
, fname
및 ext
매개 변수에는 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
경우 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 또한 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