Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Unterschiedliche Zeichengrößen können beim Einfügen von Zeichen in einen Puffer Probleme verursachen. Beachten Sie den folgenden Code, der Zeichen aus einer Zeichenfolge szin einen Puffer kopiert: rgch
cb = 0;
while( cb < sizeof( rgch ) )
rgch[ cb++ ] = *sz++;
Die Frage lautet: Wurde das letzte Byte ein Leadbyte kopiert? Im Folgenden wird das Problem nicht behoben, da er den Puffer potenziell überlaufen kann:
cb = 0;
while( cb < sizeof( rgch ) )
{
_mbccpy( rgch + cb, sz );
cb += _mbclen( sz );
sz = _mbsinc( sz );
}
Der _mbccpy Aufruf versucht, das richtige Zu tun – kopieren Sie das vollständige Zeichen, unabhängig davon, ob es sich um 1 oder 2 Bytes handelt. Es wird jedoch nicht berücksichtigt, dass das letzte kopierte Zeichen möglicherweise nicht in den Puffer passt, wenn das Zeichen 2 Byte breit ist. Die richtige Lösung ist:
cb = 0;
while( (cb + _mbclen( sz )) <= sizeof( rgch ) )
{
_mbccpy( rgch + cb, sz );
cb += _mbclen( sz );
sz = _mbsinc( sz );
}
Dieser Code testet auf mögliche Pufferüberlauf im Schleifentest, wobei _mbclen die Größe des aktuellen Zeichens getestet wird, auf szdas verwiesen wird. Durch einen Aufruf der _mbsnbcpy Funktion können Sie den Code in der while Schleife durch eine einzelne Codezeile ersetzen. Zum Beispiel:
_mbsnbcpy( rgch, sz, sizeof( rgch ) );