#include <stdio.h>#include <Windows.h>int main(){ LPCTSTR szString = TEXT("Window data type,string."); TCHAR lpString[120] = {0}; MessageBox(NULL,szString,TEXT("LPTSTR"),MB_OK); CopyMemory(lpString,szString,wcslen(szString)+1); // 为什么wcslen返回24 MessageBox(NULL,lpString,TEXT("TCHAR"),MB_OK); //只能输出红色部分 Window data t 后面被截断ype,string return 0;}
#include <stdio.h>
#include <Windows.h>
int main()
{
LPCTSTR szString = TEXT("Window data type,string.");
TCHAR lpString[120] = {0};
MessageBox(NULL,szString,TEXT("LPTSTR"),MB_OK);
CopyMemory(lpString,szString,wcslen(szString)+1); // 为什么wcslen返回24
MessageBox(NULL,lpString,TEXT("TCHAR"),MB_OK); //只能输出红色部分 Window data t 后面被截断ype,string
return 0;
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
junkboy 因为是字符数, 你这儿的 TCHAR 应该被定义为了 wchar_t , 一般 vc++ 中每个 wchar_t 对应 2 个字节.
沉迷于 wcslen(szString)*2试试
敏而好学 这样可以,可是wcslen不是能获取宽字符串的长度吗?
因为宽字符一个字的长度就是 1 啊, a 和 啊 在宽字符里都是占用一个 wchar_t, 内存的长度你需要 *sizeof(wchar_t)
字
a
啊
wchar_t
*sizeof(wchar_t)
junkboy 因为宽字符一个`字`的长度就是 1 啊, `a` 和 `啊` 在宽字符里都是占用一个 `wchar_t`, 内存的长度你需要 `*sizeof(wchar_t)`
敏而好学 想明白了,CopyMemory支持的长度单位是字节,而那个是多字节的,我只能*2
(wsclen(szString) + 1) * sizeof(WCHAR)
賈可 敏而好学 想明白了,CopyMemory支持的长度单位是字节,而那个是多字节的,我只能*2 (wsclen(szString) + ...
kongfubull CopyMemory最后一个参数是字节数,而非字符数,楼主还是要认真看MSDN啊bytes和character还是有区别的,如果说的是bytes,那么长度乘以sizeof(TCHAR)总是没错的。