lstrcpynA, fonction (winbase.h)
Copie un nombre spécifié de caractères d’une chaîne source dans une mémoire tampon.
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 de TCHAR spécifiées par iMaxLength, y compris la place d’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 de 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 de retour
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 à caractères iMaxLength.
Si la fonction échoue, la valeur de retour est NULL et lpString1 peut ne pas être terminée 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 une salle 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 et sans notifier l’appelant de l’erreur. L’appelant n’est pas sûr de supposer que l’espace insuffisant est la condition d’erreur.Si la mémoire tampon pointée par lpString1 n’est pas suffisamment 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 taille de retourne le nombre d’octets.
Par exemple, si lpString1 pointe vers une mémoire tampon szString1 déclarée comme TCHAR szString[100]
, la tailleof(szString1) donne la taille de la mémoire tampon en octets plutôt que 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 la cause de nombreux problèmes de sécurité dans les applications et peuvent provoquer 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 de sizeof(szString1)/sizeof(szString1[0])
donne la taille appropriée de la mémoire tampon.
Envisagez d’utiliser StringCchCopy à la place ; utilisez StringCchCopy(buffer, sizeof(buffer)/sizeof(buffer[0]), src);
, sachant que buffer
ne doit pas être un pointeur ou utiliser StringCchCopy(buffer, ARRAYSIZE(buffer), src);
, sachant que, lors de la copie vers un pointeur, l’appelant est responsable du passage de la taille de la mémoire pointée dans les caractères.
Passez en revue les considérations de sécurité : Interface utilisateur Windows avant de continuer.
Note
L’en-tête winbase.h définit lstrcpyn comme 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. Le mélange 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.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
serveur minimum pris en charge | Windows 2000 Server [applications de bureau uniquement] |
plateforme cible | Windows |
d’en-tête | winbase.h (inclure Windows.h) |
bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |
Voir aussi
conceptuelle
de référence