Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis 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 sz
in 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 sz
das 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 ) );