#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;
}

wcslen获取信息出错,类型有点不明白?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- wusuobuwei_1 2019-04-01 15:41关注
CopyMemory(lpString,szString,wcslen(szString)+1); 改为CopyMemory(lpString, szString, 2 * (wcslen(szString)+1) );
wcslen 返回字符串的字符个数,不包含字符串结束符_TEXT('\0')。
CopyMemory 即为 memcpy :
void *memcpy(void *dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
注意是n个字节,而不是字符串的长度。
以上。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报