qq_42577465 2019-03-30 21:16 采纳率: 100%
浏览 407
已采纳

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;
}
  • 写回答

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?