c++中String和LPTSTR的问题

try{charsz[20]="aaaa";LPTSTRss;s=sz;ss=sz;//printf("svalue:%s\n",s);//这个为什么就不行printf(... try{
char sz[20]="aaaa";LPTSTR ss;
s=sz;
ss=sz;
//printf("s value:%s\n",s); // 这个为什么就不行
printf("ss value:%s\n",ss);
}
catch(...)
{
printf("error\n");
}为什么char可以赋值给LPTSTR而不能给String,好像他们都差不多啊。要怎么改可以把一个char型的赋值给String
展开
 我来答
870177103
2013-03-26 · TA获得超过522个赞
知道小有建树答主
回答量:486
采纳率:0%
帮助的人:342万
展开全部
rev..同学说得很详细了,我补充一点
printf在指定了%s,要求变参中的参数为char*,说白了是个地址,而s虽然实际运行时被转化成地址,不过编译器检查类似这样的不正确调用(这里仅接受处理对string类型的操作),因为类型不匹配会引起很严重的问题(破坏结构的内部格式或是超范围读写),这对于指针访问来说简直是个灾难,编译器不能保证这一操作是否会引起错误,因此一视同仁不予通过
实际上我们有很多方法来绕过编译器的检查(比如地址读写(未格式化的指针,然后强制转换)),但是良好的编程风格是禁止这种方式,这会容易出现bug并且是的代码难以理解
希望维护你代码的人(如果有的话),不要知道你家庭地址,改变这种不伦不类的代码风格是唯一出路(这里就犯了使用不同标准和接口的错误)
匿名用户
2013-03-27
展开全部
这是很多人都会迷糊的问题,大家看完C/C++的书,学会char*, std::string了,可以确又被LPTSTR之类的东西给弄晕了。LPTSTR来自Win32 API,意思是Long Pointer to a Text String,这是一个宏。在MBCS的情况下,这个宏被定义为char *在UNICODE情况下,这个宏被定义为wchar_t *ss = sz之所以可以复值,是因为它们本质就是一个东西。 char *当然可以复制给CString或者std::string,但是string不能用printf打印。正确打印std::string的方法是:printf("s value:%s\n", s.c_str();或者cout << s;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-03-27
展开全部
sz是一个数组名,也是一个指向数组的指针。LPTSTR,L是long,P是pointer,STR是字符串,LPTSTR就是一个指向字符串的长整型指针。指针赋值给指针当然可以。String是字符串。不能把指针赋给一个字符串。char->string。可以用GetBuffer(),这个函数你去搜下就知道怎么用了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
reverse_walker
推荐于2018-03-14 · TA获得超过590个赞
知道小有建树答主
回答量:377
采纳率:0%
帮助的人:458万
展开全部
把C, C++ 和win32的东西混在一起了
LPTSTR 是宏,等于LPSTR或者LPWSTR
LPSTR = char*
所以ss = sz没问题.数组隐式转换成指针

string = basic_string<char, char_traits<char>, allocator<char> >也就是一个类
string可以被char赋值,只是不能被char初始化而已

还有string对象时要用cout来输出的, cout << str << endl ;

C++从不会用printf()来打印东西.
C++的异常和string + C的printf + win32的宏. 碉堡了.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
平生居
2013-03-26 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:82
采纳率:0%
帮助的人:95.4万
展开全部
给对象的赋值=实际上是对象的一个操作符重载函数,
如果对象没有该形参类型的函数,就通过不过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式