| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1835 人关注过本帖
标题:关于wchar和const wchar的问题?
只看楼主 加入收藏
a451410
Rank: 2
等 级:论坛游民
帖 子:132
专家分:98
注 册:2018-3-4
结帖率:83.67%
收藏
已结贴  问题点数:10 回复次数:4 
关于wchar和const wchar的问题?
最近在学习win32桌面,遇到的最多的问题反而是字符串的来回转换问题,这个问题搞得我头都大了.
请问,LPCWSTR和LPWSTR是不是对应着 const wchar* 和wchar*,我看头文件里大概是这样typedef的.
但我实在没有搞懂这两者有什么区别,带不带const有什么区别吗?不都是unicode的宽字符串吗?为什么
编译不过去?老是提醒我LPCWSTR不能作为LOWSTR的参数......
  我的目的是windows下的字符和整型的转换,都是Unicode编码的宽字符,使用的是库里面带的wspritf函数,总是报错,
求解怎么办,下面是转换处的代码.,
程序代码:
    int a;
    LPCWSTR str;
    a = 5;
    wsprintf(str, L"%d", a);//这里就会报错,LPCWSTR类型的实参与LPWSTR类型的形参不兼容
2025-03-10 04:00
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1709
专家分:4365
注 册:2007-12-27
收藏
得分:5 
你可以定义一个可修改的变量但你不去修改它;
但是不能定义一个不许修改的变量又去修改它。

BTW:楼主代码里的指针没有落实空间指向,也是个问题。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2025-03-10 09:21
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9042
专家分:54136
注 册:2011-1-18
收藏
得分:5 
const 标识一个希望被修改的变量,而wsprintf(str会修改str指向的内存。所以你的代码前后逻辑矛盾,编译器无法编译它。
此外,LPCWSTR 与 wsprintf也不般配,前者是宽字符,后者通过宏来决定用宽字符还是窄字符。

正确的代码应该是
程序代码:
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <wchar.h>

int main( void )
{
    int a = 5;
    wchar_t str[21];
    swprintf( str, sizeof(str)/sizeof(*str), L"%d", a );
}

程序代码:
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <wchar.h>

int main( void )
{
    int a = 5;
    TCHAR str[21];
    wsprintf( str, TEXT("%d"), a );
}

BTW:如果是C++的,建议用 std::to_string 或 std::to_chars,效率更高且不容易写错。
2025-03-10 11:45
a451410
Rank: 2
等 级:论坛游民
帖 子:132
专家分:98
注 册:2018-3-4
收藏
得分:0 
回复 2楼 forever74
确实没指向,报异常了
2025-03-10 20:37
a451410
Rank: 2
等 级:论坛游民
帖 子:132
专家分:98
注 册:2018-3-4
收藏
得分:0 
回复 3楼 rjsp
受教了
2025-03-10 20:37
快速回复:关于wchar和const wchar的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028457 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved