Partager via


lstrcpynA, fonction (winbase.h)

Copie un nombre spécifié de caractères d’une chaîne source dans une mémoire tampon.

Avertissement N’utilisez pas. Envisagez d’utiliser StringCchCopy à la place. Consultez la section Notes.
 

Syntaxe

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

Paramètres

[out] lpString1

Type : LPTSTR

Mémoire tampon de destination, qui reçoit les caractères copiés. La mémoire tampon doit être suffisamment grande pour contenir le nombre de valeurs TCHAR spécifiées par iMaxLength, y compris la place pour un caractère null de fin.

[in] lpString2

Type : LPCTSTR

Chaîne source à partir de laquelle la fonction doit copier des caractères.

[in] iMaxLength

Type : int

Nombre de valeurs TCHAR à copier à partir de la chaîne pointée par lpString2 dans la mémoire tampon pointée par lpString1, y compris un caractère null de fin.

Valeur retournée

Type : LPTSTR

Si la fonction réussit, la valeur de retour est un pointeur vers la mémoire tampon. La fonction peut réussir même si la chaîne source est supérieure à iMaxLength caractères.

Si la fonction échoue, la valeur de retour est NULL et lpString1 ne peut pas être terminé par null.

Remarques

La mémoire tampon pointée par lpString1 doit être suffisamment grande pour inclure un caractère null de fin, et la valeur de longueur de chaîne spécifiée par iMaxLength inclut la place pour un caractère null de fin.

La fonction lstrcpyn a un comportement non défini si les mémoires tampons source et de destination se chevauchent.

Avertissement de sécurité

L’utilisation incorrecte de cette fonction peut compromettre la sécurité de votre application. Cette fonction utilise la gestion structurée des exceptions (SEH) pour intercepter les violations d’accès et d’autres erreurs. Lorsque cette fonction intercepte les erreurs SEH, elle retourne NULL sans mettre fin à la chaîne null et sans avertir l’appelant de l’erreur. L’appelant n’est pas sûr de supposer qu’un espace insuffisant est la condition d’erreur.

Si la mémoire tampon pointée par lpString1 n’est pas assez grande pour contenir la chaîne copiée, un dépassement de mémoire tampon peut se produire. Lors de la copie d’une chaîne entière, notez que sizeof retourne le nombre d’octets. Par exemple, si lpString1 pointe vers une mémoire tampon szString1 déclarée comme TCHAR szString[100], sizeof(szString1) donne la taille de la mémoire tampon en octets plutôt qu’en WCHAR, ce qui peut entraîner un dépassement de capacité de mémoire tampon pour la version Unicode de la fonction.

Les situations de dépassement de mémoire tampon sont à l’origine de nombreux problèmes de sécurité dans les applications et peuvent entraîner une attaque par déni de service contre l’application si une violation d’accès se produit. Dans le pire des cas, un dépassement de mémoire tampon peut permettre à un attaquant d’injecter du code exécutable dans votre processus, en particulier si lpString1 est une mémoire tampon basée sur la pile.

L’utilisation sizeof(szString1)/sizeof(szString1[0]) donne la taille appropriée de la mémoire tampon.

Envisagez d’utiliser StringCchCopy à la place ; StringCchCopy(buffer, sizeof(buffer)/sizeof(buffer[0]), src);utilisez , étant conscient que buffer ne doit pas être un pointeur ou utiliser StringCchCopy(buffer, ARRAYSIZE(buffer), src);, étant conscient que, lors de la copie vers un pointeur, l’appelant est chargé de transmettre la taille de la mémoire pointée en caractères.

Passez en revue Considérations relatives à la sécurité : Interface utilisateur Windows avant de continuer.

Notes

L’en-tête winbase.h définit lstrcpyn en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

   
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête winbase.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

Conceptuel

Référence

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCbLength

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

StringCchLength

Chaînes

lstrcmp

lstrcmpi

lstrlen