首页
社区
课程
招聘
[求助]wcslen该如何用呢?
发表于: 2019-3-30 18:44 3688

[求助]wcslen该如何用呢?

2019-3-30 18:44
3688

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

}



[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
因为是字符数,  你这儿的 TCHAR  应该被定义为了 wchar_t ,  一般 vc++ 中每个 wchar_t 对应 2 个字节.
2019-3-30 19:20
0
雪    币: 5514
活跃值: (2254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
junkboy 因为是字符数, 你这儿的 TCHAR 应该被定义为了 wchar_t , 一般 vc++ 中每个 wchar_t 对应 2 个字节.
刚改了,还是不行。而且我工程项目中,默认的是Unicode
2019-3-30 19:25
0
雪    币: 5877
活跃值: (3227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
wcslen(szString)*2试试
2019-3-30 20:33
1
雪    币: 5514
活跃值: (2254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
沉迷于 wcslen(szString)*2试试
这样可以,可是wcslen不是能获取宽字符串的长度吗?
2019-3-30 20:56
0
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
敏而好学 这样可以,可是wcslen不是能获取宽字符串的长度吗?

因为宽字符一个的长度就是 1 啊, a 在宽字符里都是占用一个 wchar_t, 内存的长度你需要 *sizeof(wchar_t)

2019-3-30 21:44
1
雪    币: 5514
活跃值: (2254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好像明白了,问题出在CopyMemory这个函数,单位为字节
2019-3-30 21:55
0
雪    币: 5514
活跃值: (2254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
junkboy 因为宽字符一个`字`的长度就是 1 啊, `a` 和 `啊` 在宽字符里都是占用一个 `wchar_t`, 内存的长度你需要 `*sizeof(wchar_t)`
想明白了,CopyMemory支持的长度单位是字节,而那个是多字节的,我只能*2
2019-3-30 22:05
0
雪    币: 27
活跃值: (127)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
敏而好学 想明白了,CopyMemory支持的长度单位是字节,而那个是多字节的,我只能*2
(wsclen(szString) + 1) * sizeof(WCHAR)
最后于 2019-4-1 23:47 被Xenophon编辑 ,原因:
2019-4-1 23:46
1
雪    币: 5514
活跃值: (2254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
賈可 敏而好学 想明白了,CopyMemory支持的长度单位是字节,而那个是多字节的,我只能*2 (wsclen(szString)&nbsp;+ ...
点赞+5 正解
2019-4-3 16:09
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
CopyMemory最后一个参数是字节数,而非字符数,楼主还是要认真看MSDN啊bytes和character还是有区别的,如果说的是bytes,那么长度乘以sizeof(TCHAR)总是没错的。
2019-4-22 21:37
0
雪    币: 5514
活跃值: (2254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
kongfubull CopyMemory最后一个参数是字节数,而非字符数,楼主还是要认真看MSDN啊bytes和character还是有区别的,如果说的是bytes,那么长度乘以sizeof(TCHAR)总是没错的。
谢谢指点
2019-4-23 17:51
0
游客
登录 | 注册 方可回帖
返回
//