Microsoft KB Archive/179284

= FIX: _mbslwr Does Not Handle International Characters =

Q179284

-

The information in this article applies to:


 * The C Run Time (CRT)
 * Microsoft Visual C++, 32-bit Enterprise Edition, version 5.0
 * Microsoft Visual C++, 32-bit Professional Edition, version 5.0

-

SYMPTOMS
The C run-time function _mbslwr is used to convert uppercase letters in a multibyte-character string to lowercase letters. This function fails to convert characters that are in the range of 128 to 255.

STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Microsoft Visual Studio 97 service pack and in Microsoft Visual C++ version 6.0.

MORE INFORMATION
The following sample program demonstrates the problem:

//Sample.cpp // Compiler Options: none


 * 1) include 
 * 2) include 
 * 3) include 

int main {  printf("%s\n",setlocale(LC_ALL,"English_United States.1252") ); unsigned char c_Upper =  '\xD6' ; //Capital O Umlaut character value=D6h.

unsigned char c_Lower =  '\xF6' ; //Lower Case O Umlaut character value=F6h.

printf( "Before Conversion c_Upper=%Xh  c_Lower=%Xh\n",                     c_Upper, c_Lower ); _mbslwr(&c_Upper); // c_Upper should now be equal to c_Lower =F6h printf( "After  Conversion c_Upper=%Xh  c_Lower=%Xh\n",                     c_Upper, c_Lower ); return 0; }

Program output:
  English_United States.1252 Before Conversion c_Upper=D6h c_Lower=F6h After Conversion c_Upper=D6h  c_Lower=F6h

Expected output:
  English_United States.1252 Before Conversion c_Upper=D6h c_Lower=F6h After Conversion c_Upper=F6h  c_Lower=F6h Additional query words: VS97FixlistSP1 CString MakeLower

Keywords : kbCRT kbVC500bug kbVC600fix kbVS600SP1fix

Issue type : kbbug

Technology :

Last Reviewed: July 30, 2001

-

[mailto:MSDN@MICROSOFT.COM Send feedback to Microsoft]

© 2002 Microsoft Corporation. All rights reserved.