Ostatni znak w ciągu
Skorzystaj z poniższych wskazówek:
Ślad zakresów bajtów nakładania się znaków ASCII, w wielu przypadkach.Można bezpiecznie korzystać z bytewise skanowania do wszelkie znaki kontrolne (mniej niż 32).
Rozważmy następujący wiersz kodu, który może być sprawdzanie Jeżeli ostatni znak w ciągu jest znakiem odwrotnej kreski ukośnej:
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
Ponieważ strlen nie jest MBCS-aware, zwraca liczbę bajtów, nie liczba znaków w ciągu znaków wielobajtowych.Ponadto należy zauważyć, że w niektórych kod strony (932, na przykład), "\" (0x5c) jest nieprawidłowy bajt (sz jest ciągiem C).
Możliwym rozwiązaniem jest ponownie napisać kod w ten sposób:
char *pLast; pLast = _mbsrchr( sz, '\\' ); // find last occurrence of '\' in sz if ( pLast && ( *_mbsinc( pLast ) == '\0' ) ) // . . .
Ten kod zawiera funkcje MBCS _mbsrchr i _mbsinc.Ponieważ funkcje te są świadomi MBCS, można rozróżnić między ' \' znaków i bajt ' \'.Kod wykonuje niektóre działania, jeżeli ostatni znak w ciągu jest null (\0).