字符串中的最后一个字符
使用下列提示:
在许多情况下,尾字节范围与 ASCII 字符集重叠。 对任何控制字符(小于 32)可以安全地使用按字节扫描。
请看下列代码行,这些代码行可能检查字符串中最后一个字符是否为反斜杠字符:
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
由于 strlen 不能识别 MBCS,因此在多字节字符串中它将返回字节数而非字符数。 同样,注意某些代码页(如 932)中“\”(0x5c) 是一个有效的尾字节(sz 是一个 C 字符串)。
一个可能的解决方案是以下列方式重写代码:
char *pLast; pLast = _mbsrchr( sz, '\\' ); // find last occurrence of '\' in sz if ( pLast && ( *_mbsinc( pLast ) == '\0' ) ) // . . .
此代码使用 MBCS 函数 _mbsrchr 和 _mbsinc。 由于这些函数能识别 MBCS,因此它们可以区分“\”字符和尾字节“\”。 当字符串中最后一个字符为空(“\0”)时,代码将执行某些操作。