_makepath_s, _wmakepath_s
Cria um nome de caminho dos componentes. Essas são versões de _makepath, _wmakepath com aprimoramentos de segurança conforme descrito em Recursos de segurança no CRT.
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
[saída] path
Buffer de caminho completo.[entrada] sizeInWords
Tamanho do buffer no word.[entrada] sizeInBytes
Tamanho do buffer em bytes.[entrada] drive
Contém uma letra (A, B, e assim por diante) correspondentes à unidade desejada e a dois-pontos à direita opcional. _makepath_s insere os dois-pontos automaticamente no caminho composto se está ausente. Se drive é NULL ou aponta para uma cadeia de caracteres vazia, nenhuma letra de unidade aparece na cadeia de caracteres composta de path .[entrada] dir
Contém o caminho dos diretórios, não incluindo o designador de unidade ou o nome do arquivo real. A barra à direita é opcional, e uma barra (/) ou uma barra invertida (\) ou ambos podem ser usados em um único argumento de dir . Se nenhuma barra à direita (/ou//\) for especificada, será inserida automaticamente. Se dir é NULL ou aponta para uma cadeia de caracteres vazia, nenhum caminho de diretório é inserido na cadeia de caracteres composta de path .[entrada] fname
Contém o nome de arquivo base sem nenhuma extensões de nome de arquivo. Se fname é NULL ou aponta para uma cadeia de caracteres vazia, nenhum nome de arquivo é inserido na cadeia de caracteres composta de path .[entrada] ext
Contém a extensão de nome de arquivo real, com ou sem um período principal (.). _makepath_s insere o período automaticamente se não aparecer em ext. Se ext é NULL ou aponta para uma cadeia de caracteres vazia, nenhuma extensão é inserida na cadeia de caracteres composta de path .
Valor de retorno
Zero se tiver êxito; um código de erro em 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 qualquer uma das condições de erro acima ocorrerem, essas funções invoca o manipulador inválido do parâmetro, conforme descrito em Validação do parâmetro. Se a execução for permitida continuar, errno estádefinido comoEINVAL e retornaEINVAL**.** NULL de funções são permitidos 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 comentários.
Comentários
A função de _makepath_s cria uma cadeia de caracteres composta de caminho dos componentes individuais, para armazenar o resultado em path. path pode incluir uma letra de unidade, um caminho de diretório, um nome de arquivo, e uma 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 caractere amplo. Caso contrário, _wmakepath_s e _makepath_s, ao contrário, se comportam de forma idêntica.
Mapeamentos da 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 de path deve apontar para um buffer vazio grande o suficiente para manter o caminho completo. path composto não deve ser maior que a constante de _MAX_PATH , definida em Stdlib.h.
Se o caminho for NULL, o manipulador inválido do parâmetro será chamado, conforme descrito em Validação do parâmetro. Além disso, errno é definido como EINVAL. os valores deNULL são permitidos todos os outros parâmetros.
No C++, o uso dessas funções é simplificado por sobrecargas de modelo; as sobrecargas podem interpretar o tamanho do buffer automaticamente (eliminando a necessidade de especificar um argumento de tamanho) e podem substituir automaticamente as funções menos seguras mais antigas por correspondentes mais seguras e mais recentes. Para obter mais informações, consulte Sobrecargas de modelo seguras.
As versões de depuração dessas funções preenchem primeiro o buffer com 0xFD. 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 mais informações sobre compatibilidade, consulte Compatibilidade na Introdução.
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 );
}
Saída
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