lstrcpynA-Funktion (winbase.h)
Kopiert eine angegebene Anzahl von Zeichen aus einer Quellzeichenfolge in einen Puffer.
Syntax
LPSTR lstrcpynA(
[out] LPSTR lpString1,
[in] LPCSTR lpString2,
[in] int iMaxLength
);
Parameter
[out] lpString1
Typ: LPTSTR-
Der Zielpuffer, der die kopierten Zeichen empfängt. Der Puffer muss groß genug sein, um die Anzahl der TCHAR- Werte zu enthalten, die von iMaxLength-angegeben werden, einschließlich platz für ein endendes NULL-Zeichen.
[in] lpString2
Typ: LPCTSTR-
Die Quellzeichenfolge, aus der die Funktion Zeichen kopieren soll.
[in] iMaxLength
Typ: int
Die Anzahl der TCHAR- Werte, die aus der Zeichenfolge kopiert werden sollen, auf die durch lpString2 in den Puffer verwiesen wird, auf den lpString1verweist, einschließlich eines endenden Nullzeichens.
Rückgabewert
Typ: LPTSTR-
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Zeiger auf den Puffer. Die Funktion kann auch dann erfolgreich ausgeführt werden, wenn die Quellzeichenfolge größer als iMaxLength Zeichen ist.
Wenn die Funktion fehlschlägt, ist der Rückgabewert NULL- und lpString1- möglicherweise nicht null beendet.
Bemerkungen
Der Puffer, auf den lpString1 verweist, muss groß genug sein, um ein endendes NULL-Zeichen einzuschließen, und der durch iMaxLength- angegebene Zeichenfolgenlängenwert enthält Platz für ein endendes NULL-Zeichen.
Die lstrcpyn--Funktion weist ein nicht definiertes Verhalten auf, wenn Quell- und Zielpuffer überlappen.
Sicherheitswarnung
Die Verwendung dieser Funktion kann die Sicherheit Ihrer Anwendung fälschlicherweise beeinträchtigen. Diese Funktion verwendet die strukturierte Ausnahmebehandlung (SEH), um Zugriffsverletzungen und andere Fehler abzufangen. Wenn diese Funktion SEH-Fehler abfangen, gibt sie NULL- zurück, ohne die Zeichenfolge zu beenden und ohne den Aufrufer des Fehlers zu benachrichtigen. Der Aufrufer kann nicht davon ausgehen, dass nicht genügend Speicherplatz die Fehlerbedingung ist.Wenn der puffer, auf lpString1 verweist, nicht groß genug ist, um die kopierte Zeichenfolge zu enthalten, kann ein Pufferüberlauf auftreten. Beachten Sie beim Kopieren einer gesamten Zeichenfolge, dass Größe die Anzahl der Bytes zurückgibt.
Wenn z. B. lpString1 auf einen Puffer szString1 verweist, der als TCHAR szString[100]
deklariert wird, gibt sizeof(szString1) die Größe des Puffers in Bytes und nicht auf WCHAR-zurück, was zu einem Pufferüberlauf für die Unicode-Version der Funktion führen könnte.
Pufferüberlaufsituationen sind die Ursache vieler Sicherheitsprobleme in Anwendungen und können einen Denial-of-Service-Angriff auf die Anwendung verursachen, wenn eine Zugriffsverletzung auftritt. Im schlimmsten Fall kann ein Pufferüberlauf es einem Angreifer ermöglichen, ausführbaren Code in Ihren Prozess einzufügen, insbesondere, wenn lpString1- ein stapelbasierter Puffer ist.
Die Verwendung von sizeof(szString1)/sizeof(szString1[0])
gibt die richtige Größe des Puffers an.
Erwägen Sie stattdessen die Verwendung StringCchCopy-; verwenden Sie entweder StringCchCopy(buffer, sizeof(buffer)/sizeof(buffer[0]), src);
, wobei sie sich bewusst ist, dass buffer
kein Zeiger sein darf oder StringCchCopy(buffer, ARRAYSIZE(buffer), src);
verwenden. Beachten Sie, dass der Aufrufer beim Kopieren in einen Zeiger dafür verantwortlich ist, die Größe des zeigerfähigen Speichers in Zeichen zu übergeben.
Lesen Sie Sicherheitsüberlegungen: Windows-Benutzeroberfläche, bevor Sie fortfahren.
Anmerkung
Der winbase.h-Header definiert lstrcpyn als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 2000 Professional [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform- | Fenster |
Header- | winbase.h (enthalten Windows.h) |
Library | Kernel32.lib |
DLL- | Kernel32.dll |
Siehe auch
Konzeptionelle
Referenz-