| 
          【教程】C++中的宽字符 | 
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
            
              #include <conio.h> // _getch函数所在文件 #include <locale.h> // setlocale函数所在文件 #include <stdio.h> void main() {     setlocale(LC_CTYPE, "chs"); // 指定编码     char ch = 'A'; // 这是C语言中标准的字符变量     printf("%c\n", ch); // 这是输出标准字符的方法     wchar_t wch = L'我'; // 这是宽字符变量     wprintf(L"%c\n", wch); // 这是输出这个宽字符的方法     _getch(); // 暂停,等待按下回车键继续 }               
                       | 
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
            
              void sectionB() {     char str[] = "This is an ordinary string."; // 这是C语言中的一个普通字符数组     printf("%s\n", str); // 输出这个字符数组     wchar_t wstr[] = L"这是C语言中的宽字符数组";     wprintf(L"%s\n", wstr); // 这是输出这个宽字符数组的方法 } void main() {     setlocale(LC_CTYPE, "chs"); // 指定编码     sectionB();     _getch(); // 暂停,等待按下回车键继续 }               
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
            
              void sectionC() {     wchar_t wstr[] = L"这是C语言中的宽字符数组";     printf("sizeof(wchar_t) = %d\n", sizeof(wchar_t));     int length = sizeof(wstr) / sizeof(wchar_t);     printf("这个宽字符数组的长度是%d,其中包括末尾的结束符\\0。\n", length);         wchar_t *pStr = wstr;     wchar_t endlabel = '\0';     while (*pStr != '\0')     {         wprintf(L"%c\n", *pStr);         pStr++;     }     int i;     for (i = 0; i < length; i++)     {         if (wstr[i] == endlabel)             wprintf(L"第%d个字符是结束标记“\\0”。\n", i + 1);         else             wprintf(L"第%d个字符是“%c”。\n", i + 1, wstr[i]);     }         wstr[5] = L'哈';     wprintf(L"%s\n", wstr); }               
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
            
              void sectionD() {     char str[] = {'E', 'n', 'g', 'l', 'i', 's', 'h', '\0'};     printf("%s\n", str);     wchar_t wstr[] = {L'简', L'体', L'中', L'文', L'和', 'C', L'语', L'言', '\0'};     wprintf(L"%s\n", wstr); }               
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
            
              void sectionE() {     wchar_t wch;     putchar('C');     putwchar(L'哈');     putchar('\n');     printf("请输入一个汉字:\n");     wch = getwchar();     wprintf(L"您输入的汉字是: %c\n", wch);     printf("请再输入一个汉字:\n");     wscanf(L"%c", &wch);     wprintf(L"您输入的汉字是: %c\n", wch);     // 这里似乎有一个bug,只能输入前面的不能输入后面的 }               
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
             
              #include <Windows.h> void sectionF() {     CHAR ch = 'r'; // CHAR = char     LPSTR pStr = "English"; // LPSTR = char *     WCHAR wch = L'额'; // WCHAR = wchar_t     LPWSTR pwStr = L"简体中文"; // LPWSTR = wchar_t *     // 这些字符串都是只读的 }             
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
             
              回復:5樓 這裡VS2012提示最好把wscanf(L"%c", &wch);改成安全版本的wscanf_s(L"%c", &wch);。
               
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
            
              #include <stdio.h> #include <Windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {     WCHAR str[40];     wsprintf(str, L"nDmdShow = %d", nCmdShow);     MessageBox(NULL, str, L"Welcome", 0);     return 0; }               
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
             
              wsprintf的第二個參數是LPWSTR類型的。 WCHAR[40]是一個數組,相當於WCHAR *,也就是wchar_t *。又因為LPWSTR等價于wchar_t *,所以str變量可以直接傳入第二個參數中使用。              
             | 
|