string也可以很精彩

//========================================================================
//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等纯粹的字符串函数。   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle存储过程行转列,oracle 存储过程-动态行转列,解决。

create or replace package body pro_test isprocedure Alarm_ContentsByTime(p_StartTime varchar2,----开始时间p_EndTime varchar2,----结束时间io_cursorinOUT out_cursor)iscursor cursor_1 IS--获取 列用于循环。select DISTINCT t.ps_productorcode code, t.PS_PRODUCTO…

【转】【C#】使用fo-dicom完成BMP,JPG,PNG图片转换为DICOM文件

转自&#xff1a;https://developer.aliyun.com/article/672065 最近研究了一下DICOM和BMP文件转换的问题&#xff0c;也是很头大。度娘了很久&#xff0c;也在CSDN等论坛看到一些断断续续的文件&#xff0c;最主要的是代码只是片断&#xff0c;不是完整的实现。头大了。 首先…

(转载)攻击方式学习之(1) - 跨站式脚本(Cross-Site Scripting)

原文地址&#xff1a;http://www.cnblogs.com/coderzh/archive/2008/09/06/1285500.html 声明&#xff1a;本文仅供学习研究之用&#xff0c;对于本文提到的某些网站的XSS漏洞&#xff0c;请读者发扬高尚的人道主义精神不要去危害他人&#xff0c;同时希望相应的网站能够尽快修…

C++设计模式之二 AbstractFactory模式

设计模式的目的就是尽量减少“变化”对程序的影响&#xff0c;尤其是对客户程序的影响。AbstractFactory模式作为创建型模式的一种&#xff0c;解决的就是“new”在变化中可能引起的问题。 先来看看new有何种不好&#xff0c;举个创建汽车的车门的例子&#xff1a; 很自然的一…

oracle win10配置命令,记一次Windows 平台下Oracle 10.2.0.5 EM重新配置

1. 删除EM资料库、dbconsole配置D:\>emca -deconfig dbcontrol db -repos dropEMCA 开始于 2013-2-20 9:53:17EM Configuration Assistant, 10.2.0.5.0 正式版版权所有 (c) 2003, 2009, Oracle。保留所有权利。输入以下信息:数据库 SID: ora10g监听程序端口号: 1521SYS 用户…

【转】Dicom 学习笔记-Dicom 消息服务(DIMSE-C/DIMSE-N)

转自&#xff1a;https://www.jianshu.com/p/2812b0b6e548 引言 DICOM(Digital Imaging and Communications in Medicine)医学数字成像与通信&#xff0c;是医疗影像领域一个非常重要的标准&#xff0c;本文主要简单介绍 DICOM 标准中的消息交换服务。在介绍之前先声明一下&am…

改写DataCogs在MOSS列表中实现三级联动字段

项目中有需求需要实现列表中3级的字段联动。参照小熊的[分享]修复DataCogs二级联动FieldControl支持中文 &#xff0c;改造一下&#xff0c;实现了3级联动字段。另外&#xff0c;还可以实现一个列表中同时有两个&#xff0c;或两个以上互相独立的联动字段&#xff0c; 详细的字…

wince 常见问题

1 在mediaplayer全屏播放的时候&#xff0c;我可以用键盘上的某一个键调节声音大小&#xff0c;现在我想在屏幕上显示调节的结果就跟我们看电视一样能出来一些标记。当声音变大在屏幕上就增多&#xff0c; 当声音变小的时候就减少 得到播放窗口的DC&#xff0c;然后在上面显示…

【转】01.Dicom 学习笔记-DICOM C-Store 消息服务

转自&#xff1a;https://www.jianshu.com/p/bab6a85d3486 引言 之前总体介绍了 DICOM 的消息服务&#xff0c;可以参考这篇博文&#xff0c;但是有关每个服务的详细信息没有讲解&#xff0c;本文就结合开源 DICOM 库 fo-dicom 详细介绍一下 C-Store 服务。 名词简介 在正式讲…

Oracle客房管理系统论文,[转载]基于WEB的酒店管理系统论文【1】

摘要现代化的酒店组织庞大、服务项目多、信息量大&#xff0c;要想提高劳动生产、降低成本、提高服务质量和管理水平&#xff0c;进而促进经济效益&#xff0c;必须借助计算机来进行现代化的信息管理。酒店管理系统正是为此而设计的。优秀的酒店客房管理系统操作方便&#xff0…

使用C#和Excel进行报表开发(四)-复制单元格 【转】

在用Excel作报表的时候&#xff0c;可能会碰到分页的情况&#xff0c;这样就要分成多个Sheet显示&#xff0c;如果要在每页都保留表头&#xff0c;就需要将第一页作为模板设计的表头部分拷贝到其他的Sheet上&#xff0c;这时就要用用到Excel中的单元格拷贝。下面的代码说明如何…

【转】02.Dicom 学习笔记-DICOM C-Find 消息服务

引言 前篇介绍了 DICOM C-Store 消息服务&#xff0c;本文结合开源 DICOM 库 fo-dicom 详细介绍一下 C-Find 服务。 C-Find 消息服务 C-Find 服务是一个查询服务&#xff0c;用于一个 DIMSE-service-user 在同等的DIMSE-service-user 上查询复合 SOP 实例的属性满足查询条件给出…

C++设计模式之三 单例模式

《Singleton.h》 #include<iostream> #include<string> using namespace std; class A{ public: static A* GetInstance(); void ShowAddress(); private: A(); virtual ~A(); static A* m_p; }; 《Singleton.cpp》 #include "Singleton.h&q…

oracle停止trace日志,关闭ORACLE客户端trace日志

TRACE时的注意事项1、确保所需trace组建的配置文件存在缺省情况下&#xff0c;Oracle会从下列位置搜索网络配置文件a.TNS_ADMIN environment variable (incl. Windows Registry Key)b./etc or /var/opt/oracle (Unix)c.$ORACLE_HOME/network/admin (Unix)d.%ORACLE_HOME%/Netwo…

随手小记·080911

随手小记 郑昀玩聚SD(科技、体育、娱乐)&#xff1a;1&#xff1a; 叙事逻辑的来历 在我漫长的Blog阅读史中&#xff0c;我整理出自己两种最常用的阅读方式&#xff1a;按照热点主题的阅读方式&#xff0c;跳过大段大段阐述直接阅读文中最经典的话&#xff0c;于是&#xff0c;…

【转】03.Dicom 学习笔记-DICOM C-Get 消息服务

转自&#xff1a;https://www.jianshu.com/p/c7f5b9fa597c 引言 前篇介绍了 DICOM C-Find 消息服务&#xff0c;本文结合开源 DICOM 库 fo-dicom 详细介绍一下 C-Get 服务。 C-Get 消息服务 C-Get 服务主要用于获取影像&#xff0c;用于一个 DIMSE-service-user 在同等的DIMSE…

php dao类设计,DAO数据访问对象设计 - GoFrame官网 - 类似PHP-Laravel, Java-SpringBoot的Go企业级开发框架...

关于DAO数据访问对象设计其实是关于GoFrame框架工程化实践中比较重要一块设计。DAO设计结合GoFrame的ORM组件性能和易用性都很强&#xff0c;可以极大提高开发和维护效率。看完本章节内容之后&#xff0c;小伙伴们应该能够理解并体会到使用DAO数据库访问对象设计的优点。一、现…

再谈“我是怎么招聘程序员的”

我以前写过一篇“我是怎么招聘程序员的”的文章&#xff08;在CSDN那里有很多人进行了回复&#xff09;。今天&#xff0c;我想再谈谈关于招聘和面试这方面的东西&#xff0c;主要是以下这些原因&#xff1a; 近半年来我在进行了大量的招聘工作&#xff0c;对面试有一些新的体…

[SAP FI] Bank Master Vendor Master Creation Related Knowledge

*. Bank Key含义 Q : 国外的一个客户想要做Automatic Banking,需要输入bank key 和bank account在供应商主数据中, 问题是银行中文名字只能作为地址输入, 现在是关键的Bank key使用银行的英文简写加拼音的组合,比如中国工商银行上海分行,就使用ICBC_SH来代替这样子.而bank ac…

【转】DICOM图像像素值、灰度值与CT值!!!!!

转自&#xff1a;https://blog.csdn.net/syz201558503103/article/details/107238940 做医学图像处理会涉及DICOM图像&#xff0c;初学者应该要对图像像素有一定了解&#xff0c;在对像素处理中会一些算法会利用的更好。 图像灰度值的概念是什么&#xff1f;灰度也可以认为是…