wcslen获取信息出错,类型有点不明白?

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

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个字节,而不是字符串的长度。
以上。