경로 이름을 구성 요소로 분해합니다. 이러한 함수는 _splitpath 버전, CRT 보안 기능에 설명된 것 처럼 보안 기능이 향상된 _wsplitpath입니다.
구문
errno_t _splitpath_s(
const char * path,
char * drive,
size_t driveNumberOfElements,
char * dir,
size_t dirNumberOfElements,
char * fname,
size_t nameNumberOfElements,
char * ext,
size_t extNumberOfElements
);
errno_t _wsplitpath_s(
const wchar_t * path,
wchar_t * drive,
size_t driveNumberOfElements,
wchar_t *dir,
size_t dirNumberOfElements,
wchar_t * fname,
size_t nameNumberOfElements,
wchar_t * ext,
size_t extNumberOfElements
);
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _splitpath_s(
const char *path,
char (&drive)[drivesize],
char (&dir)[dirsize],
char (&fname)[fnamesize],
char (&ext)[extsize]
); // C++ only
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _wsplitpath_s(
const wchar_t *path,
wchar_t (&drive)[drivesize],
wchar_t (&dir)[dirsize],
wchar_t (&fname)[fnamesize],
wchar_t (&ext)[extsize]
); // C++ only
매개 변수
path
전체 경로입니다.
drive
뒤에 콜론(:)이 붙은 드라이브 문자입니다. 드라이브 문자가 필요하지 않은 경우 이 매개 변수를 전달할 NULL 수 있습니다.
driveNumberOfElements
싱글바이트 문자 또는 와이드 문자 단위의 drive 버퍼 크기입니다. drive이 NULL이면 이 값은 0이어야 합니다.
dir
후행 슬래시를 포함한 디렉터리 경로입니다. 슬래시(/), 백슬래시(\\) 또는 두 슬래시를 모두 사용할 수 있습니다. 디렉터리 경로가 필요하지 않은 경우 이 매개 변수를 전달할 NULL 수 있습니다.
dirNumberOfElements
싱글바이트 문자 또는 와이드 문자 단위의 dir 버퍼 크기입니다. dir이 NULL이면 이 값은 0이어야 합니다.
fname
확장명이 없는 기본 파일 이름입니다. 파일 이름이 필요하지 않은 경우 이 매개 변수를 전달할 NULL 수 있습니다.
nameNumberOfElements
싱글바이트 문자 또는 와이드 문자 단위의 fname 버퍼 크기입니다. fname이 NULL이면 이 값은 0이어야 합니다.
ext
선행 마침표(.)를 포함한 파일 이름 확장명입니다. 파일 이름 확장 프로그램이 필요하지 않은 경우 이 매개 변수를 전달할 NULL 수 있습니다.
extNumberOfElements
싱글바이트 문자 또는 와이드 문자 단위의 ext 버퍼 크기입니다. ext이 NULL이면 이 값은 0이어야 합니다.
반환 값
성공 시 0이고, 실패 시 오류 코드입니다.
오류 조건
| 조건 | 반환 값 |
|---|---|
path가 NULL인 경우 |
EINVAL |
drive가 NULL이고 driveNumberOfElements가 0이 아닌 경우 |
EINVAL |
drive이 NULL이 아니고 driveNumberOfElements가 0인 경우 |
EINVAL |
dir가 NULL이고 dirNumberOfElements가 0이 아닌 경우 |
EINVAL |
dir이 NULL이 아니고 dirNumberOfElements가 0인 경우 |
EINVAL |
fname가 NULL이고 nameNumberOfElements가 0이 아닌 경우 |
EINVAL |
fname이 NULL이 아니고 nameNumberOfElements가 0인 경우 |
EINVAL |
ext가 NULL이고 extNumberOfElements가 0이 아닌 경우 |
EINVAL |
ext이 NULL이 아니고 extNumberOfElements가 0인 경우 |
EINVAL |
위의 조건이 발생하면 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 계속해서 실행하도록 허용된 경우 이러한 함수는 errno를 EINVAL로 설정하고 EINVAL을 반환합니다.
버퍼가 너무 짧아 결과를 저장할 수 없으면 이러한 함수는 모든 버퍼를 비워 빈 문자열로 만들고 errno를 ERANGE로 설정한 후에 ERANGE를 반환합니다.
설명
_splitpath_s 함수는 경로를 4개 구성 요소로 분해합니다. _splitpath_s 는 현재 사용 중인 멀티바이트 코드 페이지에 따라 멀티바이트 문자 시퀀스를 인식하며 멀티바이트 문자열 인수를 자동으로 적절히 처리합니다. _wsplitpath_s 는 _splitpath_s의 와이드 문자 버전이며, _wsplitpath_s 에 대한 인수는 와이드 문자 문자열입니다. 그 외의 경우에는 이들 함수가 동일하게 동작합니다.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
일반 텍스트 루틴 매핑
TCHAR.H 루틴 |
_UNICODE 및 _MBCS 정의되지 않음 |
정의된 _MBCS |
정의된 _UNICODE |
|---|---|---|---|
_tsplitpath_s |
_splitpath_s |
_splitpath_s |
_wsplitpath_s |
전체 경로의 각 구성 요소는 별도의 버퍼에 저장됩니다. 매니페스트 상수_MAX_DRIVE, _MAX_DIR_MAX_FNAME및 _MAX_EXT (정의됨)는 각 파일 구성 요소에 STDLIB.H허용되는 최대 크기를 지정합니다. 해당 매니페스트 상수보다 큰 파일 구성 요소가 있으면 힙이 손상됩니다.
다음 표에는 매니페스트 상수의 값이 나와 있습니다.
| 속성 | 값 |
|---|---|
_MAX_DRIVE |
3 |
_MAX_DIR |
256 |
_MAX_FNAME |
256 |
_MAX_EXT |
256 |
전체 경로에 구성 요소(예: 파일 이름) _splitpath_s 가 없는 경우 해당 버퍼에 빈 문자열을 할당합니다.
C++에서는 템플릿 오버로드를 통해 이러한 함수를 사용하는 것이 더욱 간단해집니다. 오버로드는 버퍼 길이를 자동으로 유추할 수 있으므로 크기 인수를 지정할 필요가 없습니다. 자세한 내용은 안전한 템플릿 오버로드를 참조하세요.
이러한 함수의 디버그 라이브러리 버전은 먼저 버퍼를 0xFE 채웁니다. 이 동작을 사용하지 않도록 설정하려면 .를 사용합니다 _CrtSetDebugFillThreshold.
요구 사항
| 루틴에서 반환된 값 | 필수 헤더 |
|---|---|
_splitpath_s |
<stdlib.h> |
_wsplitpath_s |
<stdlib.h> 또는 <wchar.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
에 대한 예제를 _makepath_s_wmakepath_s참조하세요.
참고 항목
파일 처리
_splitpath, _wsplitpath
_fullpath, _wfullpath
_getmbcp
_makepath, _wmakepath
_setmbcp