随笔-91  评论-137  文章-0  trackbacks-0
首先我们探讨几个问题:
CString str = L"";
str += 'a' + L"a";
或str += L"a" + 'a';
分别会得到什么?
答案是一堆一样的乱码.
这是为什么呢?
由于运算符的优先级的关系先计算'a' + L"a"或L"a" + 'a'当字符串与单个字符相加时编译器认为是将指针向后移动'a'(0x61)个字节,最后进入CString的+=运算符重载函数,由于传入的是一个字符串指针所以函数会将从L"a"+0x61的位置开始到\0结尾的所有字符连接到原字符后.应此也就出现了乱码的情况.
解决方法:
CString str = L"";
str += CString('a') + L"a";
或str += CString(L"a") + 'a';
在做加法运算时都会进入CString的+运算符的重载函数以得到正确的结果.
posted on 2010-07-11 18:38 lwch 阅读(2813) 评论(3)  编辑 收藏 引用 所属分类: NScript

评论:
# re: 关于字符串操作的注意事项 2010-07-12 17:19 | jmchxy
很少会遇到常数那样使用的吧?
那个问题直接 str += "aa"; 或 str += L"aa" 都可以了。

从效率上考虑,连续增加应该会使用:
str += a;
str += b;

而不应该使用 str += a+b;  回复  更多评论
  
# re: 关于字符串操作的注意事项 2010-07-12 19:24 | 陈梓瀚(vczh)
(str += L"a") += L'a';  回复  更多评论
  
# re: 关于字符串操作的注意事项 2010-07-12 23:56 | lwch
@jmchxy
比如后面的L"a"在变量a里则表达式成了
str += 'a' + a;
稍不注意就会出问题..  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理