Compartir a través de


Función lstrcpynA (winbase.h)

Copia un número especificado de caracteres de una cadena de origen en un búfer.

Advertencia No use. Considere la posibilidad de usar StringCchCopy en su lugar. Vea la sección Comentarios.
 

Sintaxis

LPSTR lstrcpynA(
  [out] LPSTR  lpString1,
  [in]  LPCSTR lpString2,
  [in]  int    iMaxLength
);

Parámetros

[out] lpString1

Tipo: LPTSTR

El búfer de destino, que recibe los caracteres copiados. El búfer debe ser lo suficientemente grande como para contener el número de valores TCHAR especificados por iMaxLength, incluida la sala para un carácter nulo de terminación.

[in] lpString2

Tipo: LPCTSTR

Cadena de origen desde la que la función va a copiar caracteres.

[in] iMaxLength

Tipo: int

Número de valores TCHAR que se van a copiar de la cadena a la que apunta lpString2 en el búfer al que apunta lpString1, incluido un carácter nulo de terminación.

Valor devuelto

Tipo: LPTSTR

Si la función se ejecuta correctamente, el valor devuelto es un puntero al búfer. La función puede realizarse correctamente incluso si la cadena de origen es mayor que los caracteres iMaxLength .

Si se produce un error en la función, el valor devuelto es NULL y lpString1 puede no terminar en null.

Comentarios

El búfer al que apunta lpString1 debe ser lo suficientemente grande como para incluir un carácter nulo de terminación y el valor de longitud de cadena especificado por iMaxLength incluye espacio para un carácter nulo de terminación.

La función lstrcpyn tiene un comportamiento indefinido si los búferes de origen y destino se superponen.

Advertencia de seguridad

El uso incorrecto de esta función puede poner en peligro la seguridad de la aplicación. Esta función usa el control estructurado de excepciones (SEH) para detectar infracciones de acceso y otros errores. Cuando esta función detecta errores de SEH, devuelve NULL sin terminar la cadena y sin notificar al autor de la llamada el error. El autor de la llamada no es seguro suponer que el espacio insuficiente es la condición de error.

Si el búfer al que apunta lpString1 no es lo suficientemente grande como para contener la cadena copiada, se puede producir una saturación del búfer. Al copiar una cadena completa, tenga en cuenta que sizeof devuelve el número de bytes. Por ejemplo, si lpString1 apunta a un búfer szString1 que se declara como TCHAR szString[100], sizeof(szString1) proporciona el tamaño del búfer en bytes en lugar de WCHAR, lo que podría provocar un desbordamiento de búfer para la versión Unicode de la función.

Las situaciones de desbordamiento del búfer son la causa de muchos problemas de seguridad en las aplicaciones y pueden provocar un ataque de denegación de servicio contra la aplicación si se produce una infracción de acceso. En el peor de los casos, una saturación del búfer puede permitir que un atacante inserte código ejecutable en el proceso, especialmente si lpString1 es un búfer basado en pila.

El uso sizeof(szString1)/sizeof(szString1[0]) proporciona el tamaño adecuado del búfer.

Considere la posibilidad de usar StringCchCopy en su lugar; use , StringCchCopy(buffer, sizeof(buffer)/sizeof(buffer[0]), src);teniendo en cuenta que buffer no debe ser un puntero o usar StringCchCopy(buffer, ARRAYSIZE(buffer), src);, teniendo en cuenta que, al copiar en un puntero, el autor de la llamada es responsable de pasar el tamaño de la memoria apuntada en caracteres.

Revise Consideraciones de seguridad: Interfaz de usuario de Windows antes de continuar.

Nota

El encabezado winbase.h define lstrcpyn como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winbase.h (incluye Windows.h)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Consulte también

Conceptual

Referencia

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCbLength

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

StringCchLength

Cadenas

lstrcmp

lstrcmpi

lstrlen