Compartir a través de


_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 de 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 plantillas 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