_splitpath_s, _wsplitpath_s

Divide um nome de caminho em componentes. Estas funções são versões de _splitpath, _wsplitpath com aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.

Sintaxe

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

Parâmetros

path
Caminho completo.

drive
Letra da unidade, seguida por dois pontos (:). Você pode passar NULL por esse parâmetro se não precisar da letra da unidade.

driveNumberOfElements
O tamanho do buffer drive em caracteres de byte único ou largos. Se drive é NULL, esse valor deve ser 0.

dir
Caminho do diretório, incluindo barra à direita. Barras duplas (/), barras invertidas (\\) ou ambas podem ser usadas. Você pode passar NULL por esse parâmetro se não precisar do caminho do diretório.

dirNumberOfElements
O tamanho do buffer dir em caracteres de byte único ou largos. Se dir é NULL, esse valor deve ser 0.

fname
Nome de arquivo base (sem extensão). Você pode passar NULL para este parâmetro se não precisar do nome do arquivo.

nameNumberOfElements
O tamanho do buffer fname em caracteres de byte único ou largos. Se fname é NULL, esse valor deve ser 0.

ext
Extensão de nome de arquivo, incluindo ponto à esquerda (.). Você pode passar NULL por este parâmetro se não precisar da extensão do nome do arquivo.

extNumberOfElements
O tamanho do buffer ext em caracteres de byte único ou largos. Se ext é NULL, esse valor deve ser 0.

Valor retornado

Zero se for bem-sucedido; um código de erro em caso de falha.

Condições de erro

Condição Valor retornado
path é NULL EINVAL
drive é NULL, driveNumberOfElements é diferente de zero EINVAL
drive é diferente de NULL, driveNumberOfElements é zero EINVAL
dir é NULL, dirNumberOfElements é diferente de zero EINVAL
dir é diferente de NULL, dirNumberOfElements é zero EINVAL
fname é NULL, nameNumberOfElements é diferente de zero EINVAL
fname é diferente de NULL, nameNumberOfElements é zero EINVAL
ext é NULL, extNumberOfElements é diferente de zero EINVAL
ext é diferente de NULL, extNumberOfElements é zero EINVAL

Se qualquer uma das condições acima ocorrer, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, essas funções definirão errno como EINVAL e retornarão EINVAL.

Se qualquer um dos buffers é curto demais para conter o resultado, essas funções limpam todos os buffers para cadeias de caracteres vazias, definem errno como ERANGE e retornam ERANGE.

Comentários

A função _splitpath_s divide um caminho em seus quatro componentes. _splitpath_s manipula automaticamente argumentos de cadeia de caracteres multibyte conforme apropriado, reconhecendo sequências de caracteres multibyte de acordo com a página de código multibyte que está sendo usada no momento. _wsplitpath_s é uma versão de caractere largo de _splitpath_s; os argumentos para _wsplitpath_s são cadeias de caracteres largas. Caso contrário, essas funções se comportam de forma idêntica

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

Mapeamentos de rotina de texto genérico

Rotina TCHAR.H _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_tsplitpath_s _splitpath_s _splitpath_s _wsplitpath_s

Cada componente do caminho completo é armazenado em um buffer separado; as constantes de manifesto _MAX_DRIVE, _MAX_DIR, _MAX_FNAME e _MAX_EXT (definidas em STDLIB.H) especificam o tamanho máximo permitido para cada componente de arquivo. Componentes de arquivo maiores do que as constantes de manifesto correspondentes causam corrupção de heap.

A tabela a seguir lista os valores das constantes do manifesto.

Nome Valor
_MAX_DRIVE 3
_MAX_DIR 256
_MAX_FNAME 256
_MAX_EXT 256

Se o caminho completo não contiver um componente (por exemplo, um nome de arquivo), _splitpath_s atribuirá uma cadeia de caracteres vazia ao buffer correspondente.

No C++, o uso dessas funções é simplificado por sobrecargas de modelo. As sobrecargas podem inferir automaticamente o tamanho do buffer, eliminando a necessidade de especificar um argumento de tamanho. Para obter mais informações, consulte Sobrecargas de modelo seguras.

As versões de biblioteca de depuração dessas funções preenchem o buffer com 0xFE. Para desabilitar esse comportamento, use _CrtSetDebugFillThreshold.

Requisitos

Rotina Cabeçalho necessário
_splitpath_s <stdlib.h>
_wsplitpath_s <stdlib.h> ou <wchar.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

Confira o exemplo de _makepath_s, _wmakepath_s.

Confira também

Manipulação de arquivos
_splitpath, _wsplitpath
_fullpath, _wfullpath
_getmbcp
_makepath, _wmakepath
_setmbcp