_makepath_s
, _wmakepath_s
Crea un nombre de ruta de acceso de los componentes. Estas funciones son versiones de _makepath
, _wmakepath
con mejoras de seguridad, como se describe en Características de seguridad de CRT.
Sintaxis
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
Búfer de la ruta de acceso completa.
sizeInWords
Tamaño del búfer en palabras.
sizeInBytes
Tamaño del búfer en bytes.
drive
Contiene una letra (A, B, etc.) correspondiente a la unidad deseada y un signo de dos puntos final opcional. _makepath_s
inserta los dos puntos automáticamente en la ruta de acceso compuesta si falta. Si drive
es NULL
o apunta a una cadena vacía, no aparecerá ninguna letra de unidad en la cadena compuesta path
.
dir
Contiene la ruta de acceso de los directorios, sin incluir el designador de unidad ni el nombre de archivo real. La barra diagonal final es opcional y una barra diagonal (/) o una barra diagonal inversa (\) o ambas pueden usarse en un único dir
argumento. Si no se especifica ninguna barra diagonal final (/ o \), se inserta automáticamente. Si dir
es NULL
o apunta a una cadena vacía, no se insertará ninguna ruta de acceso de directorio en la cadena compuesta path
.
fname
Contiene el nombre de archivo base sin ninguna extensión de nombre de archivo. Si fname
es NULL
o apunta a una cadena vacía, no se insertará ningún nombre de archivo en la cadena compuesta path
.
ext
Contiene la extensión de nombre de archivo real, con o sin punto inicial (.). _makepath_s
inserta automáticamente el período si no aparece en ext
. Si ext
es NULL
o apunta a una cadena vacía, no se insertará ninguna extensión en la cadena compuesta path
.
Valor devuelto
Devuelve cero si se ejecuta correctamente; devuelve un código de error si se produce un error.
Condiciones del error
path |
sizeInWords / sizeInBytes |
Return | Contenido de path |
---|---|---|---|
NULL |
cualquiera | EINVAL |
no modificado |
cualquiera | <= 0 | EINVAL |
no modificado |
Si se produce alguna de las condiciones de error anteriores, estas funciones invocan al controlador de parámetros no válidos, tal como se describe en Validación de parámetros. Si la ejecución puede continuar, errno
se establece en EINVAL
y la función devuelve EINVAL
. NULL
está admitido para los parámetros drive
, fname
y ext
. Para obtener información sobre el comportamiento que se produce cuando estos parámetros son punteros nulos o cadenas vacías, vea la sección Comentarios.
Comentarios
La función _makepath_s
crea una cadena de ruta de acceso compuesta a partir de componentes determinados y almacena el resultado en path
. path
puede incluir una letra de unidad, una ruta de directorio, el nombre de archivo y la extensión. _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.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Asignaciones de rutinas 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 path
debe apuntar a un búfer vacío suficientemente grande para incluir la ruta de acceso completa. La path
compuesta no debe ser mayor que la constante _MAX_PATH
, definida en Stdlib.h.
Si path es NULL
, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Además, errno
está establecido en EINVAL
. Los valores NULL
están permitidos para 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 el requisito 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, consulte Sobrecargas de plantilla seguras.
Las versiones de la biblioteca de depuración de estas funciones rellenan primero el búfer con 0xFE. Para deshabilitar este comportamiento, use _CrtSetDebugFillThreshold
.
Requisitos
Routine | Encabezado necesario |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> o <wchar.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
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 );
}
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
Consulte también
Control de archivos
_fullpath
, _wfullpath
_splitpath_s
, _wsplitpath_s
_makepath
, _wmakepath