title | ms.custom | ms.date | ms.reviewer | ms.suite | ms.technology | ms.tgt_pltfrm | ms.topic | dev_langs | helpviewer_keywords | ms.assetid | caps.latest.revision | author | ms.author | manager | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Last Character in a String | Microsoft Docs |
11/04/2016 |
|
article |
|
|
0a180376-4e55-41e8-9c64-539c7b6d8047 |
7 |
ghogen |
ghogen |
ghogen |
Use the following tips:
-
Trail byte ranges overlap the ASCII character set in many cases. You can safely use bytewise scans for any control characters (less than 32).
-
Consider the following line of code, which might be checking to see if the last character in a string is a backslash character:
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
Because
strlen
is not MBCS-aware, it returns the number of bytes, not the number of characters, in a multibyte string. Also, note that in some code pages (932, for example), '\' (0x5c) is a valid trail byte (sz
is a C string).One possible solution is to rewrite the code this way:
char *pLast; pLast = _mbsrchr( sz, '\\' ); // find last occurrence of '\' in sz if ( pLast && ( *_mbsinc( pLast ) == '\0' ) ) // . . .
This code uses the MBCS functions
_mbsrchr
and_mbsinc
. Because these functions are MBCS-aware, they can distinguish between a '\' character and a trail byte '\'. The code performs some action if the last character in the string is a null ('\0').