_makepath_s, _wmakepath_s
Crea un nombre de ruta de componentes. Éstas son versiones de _makepath, _wmakepath con mejoras de seguridad como se describe en Características de seguridad de 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
[out] path
Búfer de la ruta de acceso completa.[in] sizeInWords
Tamaño del búfer en palabras.[in] sizeInBytes
Tamaño del búfer en bytes.[in] drive
Contiene una letra (A, b, etc.) correspondiente a la unidad deseada y un signo de dos puntos final opcional. _makepath_s inserta el dos puntos automáticamente en la ruta compuesta si falta. Si drive es NULL o puntos en una cadena vacía, ninguna letra de unidad aparece en la cadena compuesta de path .[in] dir
Contiene la ruta de acceso de los directorios, sin incluir el designador de unidad o el nombre del archivo. La barra diagonal final es opcional, y una barra diagonal (/) o una barra diagonal inversa (\) o ambas podrían usar en un solo argumento de dir . Si no se especifica ninguna barra diagonal final (/o \), se inserta automáticamente. Si dir es NULL o puntos en una cadena vacía, no se inserta ninguna ruta de directorio en la cadena compuesta de path .[in] fname
Contiene el nombre de archivo base sin ninguna extensiones. Si fname es NULL o puntos en una cadena vacía, no se insertará ningún nombre de archivo en la cadena compuesta de path .[in] ext
Contiene la extensión de nombre de archivo real, con o sin un punto principal (.). _makepath_s inserta el período automáticamente si no aparece en ext. Si ext es NULL o puntos en una cadena vacía, no se inserta extensiones en la cadena compuesta de path .
Valor devuelto
Devuelve cero si se ejecuta correctamente; devuelve un código de error si se produce un error.
Condiciones de error
path |
sizeInWords / sizeInBytes |
Devolución |
Contenido de path |
---|---|---|---|
NULL |
any |
EINVAL |
no modificado |
any |
<= 0 |
EINVAL |
no modificado |
Si es un de los sobre condiciones de error, estas funciones se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros. Si la ejecución puede continuar, errno se estableceenEINVAL y las funciones devuelvenEINVAL**.** NULL se tienen en cuenta los parámetros drive, fname, y ext. Para obtener información sobre el comportamiento cuando estos parámetros son punteros nulos o cadenas vacías, vea la sección comentarios.
Comentarios
La función de _makepath_s crea una cadena compuesta de la ruta de acceso de los componentes individuales, almacenar el resultado en path. path podría incluir una letra de unidad, una ruta de acceso del directorio, un nombre de archivo, y una extensión de nombre de archivo. _wmakepath_s es una versión con caracteres anchos de _makepath_s; los argumentos a _wmakepath_s son cadenas de caracteres anchos. Por lo demás, _wmakepath_s y _makepath_s se comportan de forma idéntica.
Asignaciones de rutina de texto genérico
Rutina Tchar.h |
_UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
El argumento de path debe señalar a un búfer vacío suficientemente grande para contener la ruta completa. path compuesto debe ser menor que la constante de _MAX_PATH , definida en Stdlib.h.
Si la ruta de acceso es NULL, se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros. Además, errno se establece en EINVAL. los valores deNULL se permiten todos los demás parámetros.
En C++, el uso de estas funciones se simplifica con las sobrecargas de plantilla; las sobrecargas pueden realizar una inferencia automáticamente de la longitud de búfer (lo que elimina la necesidad de especificar un argumento de tamaño) y pueden reemplazar automáticamente funciones anteriores no seguras con sus homólogos seguros más recientes. Para obtener más información, vea Sobrecargas de plantilla seguras.
Las versiones de depuración de estas funciones rellenan primero el búfer con 0xFD. Para deshabilitar este comportamiento, use _CrtSetDebugFillThreshold.
Requisitos
Rutina |
Encabezado necesario |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> o <wchar.h> |
Para obtener más información de compatibilidad, vea Compatibilidad en la Introducción.
Ejemplo
// 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 );
}
Resultados
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