다음을 통해 공유


_splitpath_s, _wsplitpath_s

경로 이름을 구성 요소로 분해합니다. 이러한 함수는 _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 버퍼 크기입니다. driveNULL이면 이 값은 0이어야 합니다.

dir
후행 슬래시를 포함한 디렉터리 경로입니다. 슬래시(/), 백슬래시(\\) 또는 두 슬래시를 모두 사용할 수 있습니다. 디렉터리 경로가 필요하지 않은 경우 이 매개 변수를 전달할 NULL 수 있습니다.

dirNumberOfElements
싱글바이트 문자 또는 와이드 문자 단위의 dir 버퍼 크기입니다. dirNULL이면 이 값은 0이어야 합니다.

fname
확장명이 없는 기본 파일 이름입니다. 파일 이름이 필요하지 않은 경우 이 매개 변수를 전달할 NULL 수 있습니다.

nameNumberOfElements
싱글바이트 문자 또는 와이드 문자 단위의 fname 버퍼 크기입니다. fnameNULL이면 이 값은 0이어야 합니다.

ext
선행 마침표(.)를 포함한 파일 이름 확장명입니다. 파일 이름 확장 프로그램이 필요하지 않은 경우 이 매개 변수를 전달할 NULL 수 있습니다.

extNumberOfElements
싱글바이트 문자 또는 와이드 문자 단위의 ext 버퍼 크기입니다. extNULL이면 이 값은 0이어야 합니다.

반환 값

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

오류 조건

조건 반환 값
pathNULL인 경우 EINVAL
driveNULL이고 driveNumberOfElements가 0이 아닌 경우 EINVAL
driveNULL이 아니고 driveNumberOfElements가 0인 경우 EINVAL
dirNULL이고 dirNumberOfElements가 0이 아닌 경우 EINVAL
dirNULL이 아니고 dirNumberOfElements가 0인 경우 EINVAL
fnameNULL이고 nameNumberOfElements가 0이 아닌 경우 EINVAL
fnameNULL이 아니고 nameNumberOfElements가 0인 경우 EINVAL
extNULL이고 extNumberOfElements가 0이 아닌 경우 EINVAL
extNULL이 아니고 extNumberOfElements가 0인 경우 EINVAL

위의 조건이 발생하면 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 계속해서 실행하도록 허용된 경우 이러한 함수는 errnoEINVAL로 설정하고 EINVAL을 반환합니다.

버퍼가 너무 짧아 결과를 저장할 수 없으면 이러한 함수는 모든 버퍼를 비워 빈 문자열로 만들고 errnoERANGE로 설정한 후에 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