目前我正在阅读Byarne Stroustrup的"C++之旅".重要的是:关于"指针,数组和引用",他举了一个关于如下使用的例子nullptr:
int count_x(char* p, char x)
// count the number of occurrences of x in p[]
// p is assumed to point to a zero-terminated array of char (or to nothing)
{
if (p == nullptr) return 0;
int count = 0;
for (; p != nullptr; ++p)
if (*p == x)
++count;
return count;
}
Run Code Online (Sandbox Code Playgroud)
在我的主要内容中:
int main(){
char* str = "Good morning!";
char c = 'o';
std::cout << count_x(str, c) << std::endl;
return 0;
} …Run Code Online (Sandbox Code Playgroud) 我习惯于处理 ASCII 字符串,但现在使用 UNICODE 我对某些术语感到非常困惑:
什么是多字节字符和一个有widechar什么区别?多字节是指在内存中包含多个字节的字符,widechar只是一种数据类型来表示它吗?
MultiByteToWideCharand转换WideCharToMultiByte?如果我声明如下:
wchar_t* wcMsg = L"?????";
MessageBoxW(0, wcMsg, 0, 0);
Run Code Online (Sandbox Code Playgroud)
如果我定义,它会正确打印消息UNICODE但是为什么我没有从WideCharToMultiByte??
我的项目中的字符集有什么区别:_MBCS和UNICODE?
MSDN 让我对“Windows API”感到困惑的最后一件事是 UTF-16。
任何人都可以用一些例子来解释。一个很好的澄清真的很感激。
我决定将我的win32 c ++应用程序转换为Unicode版本,但是当我使用它时,我收到了阿拉伯语,中文和日语的不可读信件......
第一:
如果我不使用Unicode,我在编辑框中得到了阿拉伯语ok窗口标题:
HWND hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "? ? ? ? ? ? ? ? ?", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE, 10, 10, 300, 200, hWnd, (HMENU)100, GetModuleHandle(NULL), NULL);
SetWindowText(hWnd, "???? ?????");
Run Code Online (Sandbox Code Playgroud)
输出似乎没问题,工作正常!(没有unicode).
我在包含标题之前添加了:
#define UNICODE
#include <windows.h
Run Code Online (Sandbox Code Playgroud)
现在在窗口过程中:
case WM_CREATE:{
HWND hEdit = CreateWindowExW(WS_EX_CLIENTEDGE, L"Edit", L"? ? ? ? ? ? ? ? ?", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE, 10, 10, 300, 200, hWnd, (HMENU)100, GetModuleHandle(NULL), NULL);
// Even I send …Run Code Online (Sandbox Code Playgroud) 我有这个问题我不明白为什么我得到不正确的结果:
if(sizeof(int) > -1)
cout << "true" << endl;
else
cout << "false" << endl;
Run Code Online (Sandbox Code Playgroud)
上面也总是打印错误!但下面是正确的:
int n = sizeof(int);
// correct
if(n > -1)
cout << "true" << endl;
else
cout << "false" << endl;
Run Code Online (Sandbox Code Playgroud)
谁能向我解释发生了什么?谢谢.