作者共發了9篇帖子。 內容轉換:不轉換▼
 
點擊 回復
411 8
【教程】C++中的宽字符
一派護法 十九級
1樓 發表于:2015-10-30 19:54
#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(); // 暂停,等待按下回车键继续
}

一派護法 十九級
2樓 發表于:2015-10-30 19:56
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(); // 暂停,等待按下回车键继续
}

一派護法 十九級
3樓 發表于:2015-10-30 20:20
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);
}

一派護法 十九級
4樓 發表于:2015-10-30 20:25
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);
}

一派護法 十九級
5樓 發表于:2015-10-30 20:40
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,只能输入前面的不能输入后面的
}

一派護法 十九級
6樓 發表于:2015-10-30 20:59
#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 *
    // 这些字符串都是只读的
}
一派護法 十九級
7樓 發表于:2015-10-30 21:03
回復:5樓
這裡VS2012提示最好把wscanf(L"%c", &wch);改成安全版本的wscanf_s(L"%c", &wch);。

一派護法 十九級
8樓 發表于:2015-10-30 21:08
#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;
}
一派護法 十九級
9樓 發表于:2015-10-30 21:10
wsprintf的第二個參數是LPWSTR類型的。
WCHAR[40]是一個數組,相當於WCHAR *,也就是wchar_t *。又因為LPWSTR等價于wchar_t *,所以str變量可以直接傳入第二個參數中使用。

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:411 回複數:8
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2015-10-30 21:10
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。