_makepath_s
, _wmakepath_s
Cria um nome de caminho com base nos componentes. Estas funções são versões de _makepath
, _wmakepath
com aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.
Sintaxe
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
Parâmetros
path
Buffer de caminho completo.
sizeInWords
O tamanho do buffer em palavras.
sizeInBytes
O tamanho do buffer em bytes.
drive
Contém uma letra (A, B e assim por diante) correspondente à unidade desejada e um sinal de dois pontos opcional à direita. _makepath_s
insere os dois-pontos automaticamente no caminho composto se estiver ausente. Se drive
for NULL
ou apontar para uma cadeia de caracteres vazia, nenhuma letra da unidade aparecerá na cadeia de caracteres de composição path
.
dir
Contém o caminho de diretórios, excluindo o designador da unidade ou o nome de arquivo real. A barra à direita é opcional e uma barra (/) ou uma barra invertida (\) ou ambas podem ser usadas em um único dir
argumento. Se nenhuma barra final (/ ou \) for especificada, ela será inserida automaticamente. Se dir
for NULL
ou apontar para uma cadeia de caracteres vazia, nenhum caminho de diretório será inserido na cadeia de caracteres de composição path
.
fname
Contém o nome de arquivo base sem qualquer extensão de nome de arquivo. Se fname
for NULL
ou apontar para uma cadeia de caracteres vazia, nenhum nome de arquivo será inserido na cadeia de caracteres de composição path
.
ext
Contém a extensão de nome de arquivo real, com ou sem um ponto à esquerda (.). _makepath_s
insere o ponto automaticamente se ele não aparecer em ext
. Se ext
for NULL
ou apontar para uma cadeia de caracteres vazia, nenhuma extensão será inserida na cadeia de caracteres de composição path
.
Valor retornado
Zero se for bem-sucedido; um código de erro em caso de falha.
Condições de erro
path |
sizeInWords / sizeInBytes |
Return | Conteúdo de path |
---|---|---|---|
NULL |
any | EINVAL |
não modificado |
any | <= 0 | EINVAL |
não modificado |
Se ocorrer qualquer uma das condições de erro acima, essas funções invocarão o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, errno
será definido como EINVAL
e as funções retornarão EINVAL
. NULL
tem permissão para os parâmetros drive
, fname
e ext
. Para obter informações sobre o comportamento quando esses parâmetros são ponteiros nulos ou cadeias de caracteres vazias, consulte a seção de Comentários.
Comentários
A função _makepath_s
cria uma cadeia de caracteres de caminho de composição com base em componentes individuais e armazena o resultado em path
. O path
pode incluir uma letra da unidade, caminho de diretório, nome de arquivo e extensão de nome de arquivo. _wmakepath_s
é uma versão de caractere largo de _makepath_s
; os argumentos para _wmakepath_s
são cadeias de caracteres largas. Caso contrário, _wmakepath_s
e _makepath_s
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 |
---|---|---|---|
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
O argumento path
deve apontar para um buffer vazio grande o suficiente para conter o caminho completo. A composição path
não deve ser maior do que a constante _MAX_PATH
, definida em Stdlib.h.
Se path for NULL
, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Além disso, errno
é definido como EINVAL
. Valores NULL
são permitidos para todos os outros parâmetros.
Em C++, o uso dessas funções é simplificado pelas sobrecargas de modelo; as sobrecargas podem inferir o tamanho do buffer automaticamente (eliminando a necessidade de especificar um argumento de tamanho) e podem substituir automaticamente funções mais antigas e não seguras por suas equivalentes mais recentes e seguras. 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 |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> ou <wchar.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
// 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
Confira também
Manipulação de arquivos
_fullpath
, _wfullpath
_splitpath_s
, _wsplitpath_s
_makepath
, _wmakepath