//========================================================================
//TITLE:
//    string也可以很精彩
//AUTHOR:
//    norains
//DATE:
//    Moday 03-November-2008
//Environment:
//    NONE
//========================================================================
    对于习惯于MFC架构的朋友来说,估计直接采用API方式写代码最痛苦的莫过于没有CString。其实,在STL里面,我们依然还有std::string可用,虽然在某些程度中不及CString便利,但也能勉强聊胜于无了。
    
    
    1.宏定义
    
     在WinCE编程中,我们几乎很少直接使用wchar_t,对于char也是如此。取而代之,我们更倾向于微软的建议:TCHAR----没办法,谁让wince是微软的产品呢?但既然都已经上了这贼船,那么我们不妨也入乡随俗一把,将std::string也做类似的定义吧:
     
     #ifdef UNICODE
      #ifndef TSTRING
       #define TSTRING std::wstring
      #endif
     #else
      #ifndef TSTRING
       #define TSTRING std::string
      #endif
     #endif
     
     带来的另外一个好处是,我们可以少敲打四次键盘。从延长键盘寿命的角度考虑,这也算是一大贡献。好吧,为了我的键盘能够服役得更久一些,接下来的内容,我都会直接采用TSTRING替代。
     
     
    2.初始化
    
    初始化的方式多种多样,一般会有如下:
    TSTRING strA = TEXT("A");
  TSTRING strB(TEXT("B"));
  
  如果和容器打交道,那其实也很简单:
    std::vector<TCHAR> vtC(MAX_PATH,0);
  TSTRING strC(vtC.begin(),vtC.end());
  
  
  3.赋值
  
  初始化简单,赋值也不会差哪里去:
  
  strA = TEXT("A2");

TCHAR szB[] = TEXT("B2");
  strB = szB;
  
  和容器打交道,同样也是简单:
  strC = &vtC[0];
  
  
  4.追加
  
  让我们回忆一下纯粹用数组的日子,如果想要在一固定的数组后面追加字符串,那么我们首先要分配一个足够大的空间,然后赋值旧的数值,最后再追加新值。也许很多人对下面这段伪代码记忆犹新:
  
  TCHAR *pBuf;
  ...  
  TCHAR *pNew = new TCHAR[_tcslen(pBuf) + TEXT("Append") + 1];
  _tcscpy(pNew,pBuf);
  _tcscat(pNew,TEXT("Append"));
  delete []pBuf;
  pBuf = pNew;
  
  呃,没错,的确如此,如果我们需要在一个数组末尾追加新值,这些麻烦的事情我们必须要亲身经历的。还好,我们现在终于可以和这种折磨人的玩意说Goodbye了。对于string而言,追加新值?很简单,就像JAVA一样:
  strA += TEXT("Append");
  
  是的,你没看错,就是一条语句,再无别处。
  
  对于数组,对于容器,同样如此:
  strB += szB;
  strC += &vtC[0];
  
  
  5.与API函数打交道
  
  Windows平台的API函数,自然是要照顾C的使用者。所以,可以这么说:大部分的API函数,为了能够在C中调用,基本上采用的都是C接口的写法。而TSTRING,确切地说,是一个class,而不是一个value type,所以无法直接赋值。
  
  以CreateFile为例,其声明如下:
    HANDLE CreateFile(
    LPCTSTR lpFileName, 
    DWORD dwDesiredAccess, 
    DWORD dwShareMode, 
    LPSECURITY_ATTRIBUTES lpSecurityAttributes, 
    DWORD dwCreationDisposition, 
    DWORD dwFlagsAndAttributes, 
    HANDLE hTemplateFile
    );
  
    第一个参数是LPCTSTR,为一个指针,所以这样直接赋值铁定是通不过编译的:
    CreateFile(strA, ...);
    
    还好,伟大的STL构建者已经为我们考虑到了这个问题,我们只需要调用c_str函数即可:
    CreateFile(strA.c_str(), ...);         
    
    类似,c_str还可以用在_tcslen,_tcscat等纯粹的字符串函数。

string也可以很精彩相关推荐

  1. 《Linux命令行大全》:1-6:重定向和管道(很精彩)

    <Linux命令行大全>:1-6:重定向和管道(很精彩) https://www.toutiao.com/i6937081007581430303/?tt_from=weixin& ...

  2. Linux那些事儿之我是U盘(5)外面的世界很精彩

    看代码之前,我曾经认真的思考过这么一个问题,我需要关注的仅仅是drivers/usb/storage/目录下面那相关的3000多行代码吗?就是这样几个文件就能让一个个不同的U盘在Linux下面工作起来 ...

  3. “使能”数字化 “浙”里很精彩

    ▼ 更多精彩推荐,请关注我们 ▼ 浙江省"十万企业上云"进行得如火如荼.该行动计划旨在以云计算技术和平台为支撑,切实转变经济发展方式,降低企业信息系统构建成本,提高企业信息化应用水 ...

  4. 很精彩的一篇传道文 (寻找罗素的三激情时发现的)

    很精彩的一篇传道文,父传女道. http://blog.sina.com.cn/s/blog_4cd081e901017heq.html 爸爸: 读了你的<罗丹的启迪>,我真的受到启迪了. ...

  5. #MEM课程#《工程经济》第1课--谢老师讲的很精彩

    1天的工程经济学,谢老师讲的很精彩,在课程中穿插了很多政治.经济.社会的实例.晚上回来又简单的梳理了一下今天给我留下深刻印象的知识点,以增加记忆. 一.绪论 1.1776年,美国发表<独立宣言& ...

  6. 二零一五,外面的世界很精彩

    [二零一五,我大四了]     走到"二"的年纪里,也是经历了一个又一个的终结点.六年级.初三.高三,时光荏苒,这一年,我大四了,又来到了这样一个终结点. 四年之前,刚刚来到廊坊师 ...

  7. String是一个很普通的类 - Java那些事儿

    上一篇我们讲了Java中的数组,其实是为本章的内容做准备的,String这个类是我们在写Java代码中用得最多的一个类,没有之一,今天我们就讲讲它,我们打开String这个类的源码: 声明了一个cha ...

  8. 普通的java类型是指,String是一个很普通的类 - Java那些事儿

    上一篇我们讲了Java中的数组,其实是为本章的内容做准备的,String这个类是我们在写Java代码中用得最多的一个类,没有之一,今天我们就讲讲它,我们打开String这个类的源码: 声明了一个cha ...

  9. “宅一族”大数据报告:喜欢学习,喜欢健身,生活同样很精彩

    [数据猿导读]近年来,有越来越多的人喜欢"宅"在家里,他们用手机打发一天,他们沉迷于自己的兴趣.爱好不可自拔.尽管这种"宅文化"一兴起就频频遭到"与社 ...

最新文章

  1. Python之旅.第九章.并发编程..
  2. Linux软件安装包中devel与非devel包之间的区别
  3. Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏
  4. 线程属性--十分重要的概念
  5. 计算机安全模式无法进入安全模式,如何解决无法在Windows 10中进入安全模式的问题...
  6. 如何形成欧姆接触_Y5T307 半导体激光器欧姆接触,以及欧姆接触与肖特基接触的区别...
  7. 【测试基础】测试用例的设计方法
  8. Vue (响应式原理-模拟-2-Observer)
  9. 实现option上下移动_JS实现Select的option上下移动的方法
  10. python棋盘覆盖问题_棋盘覆盖问题可视化动图——python
  11. 映射网络驱动器 net use
  12. 【新人c语言强化训练 】 c 语言强化练习2。1 数据对齐[zt]
  13. 92 款中国风古风古韵中文字体美工古代书法字体打包下载
  14. 时钟天气小插件显示没服务器,天气时钟小插件大全
  15. 人工智能与大数据就业前景_大数据,数据分析和人工智能方向就业前景
  16. typora 编辑器菜单栏不见了:打开了一体化模式
  17. 录音文件怎么转换成mp3格式
  18. 全国高校计算机能力挑战赛赛事通知
  19. sails mysql_Sails+MVC+Mysql+Node+学习笔记一
  20. 赢在互联网的起跑线上

热门文章

  1. 获取淘宝开发平台的sessionKey
  2. Nginx windows安装部署
  3. .Net 中的继承知识点
  4. 1013 数素数 (20分)
  5. 噪音曲线图测试软件,利用示波器统计工具分析有噪声信号之测量统计和余晖图...
  6. java前言_Java Web前言
  7. Nginx----进阶
  8. 20165203 2017-2018-2 《Java程序设计》第一周学习总结
  9. flex布局应用与踩坑
  10. APP里如何添加本地文本