在Visual C++中,对字符串的处理是编程中经常遇到的问题。笔者在实际的工作中就经常性地碰到这类问题,且常常游走于CString、char及其相互之间转换的情形当中,因笔者在C++方面也是刚刚起步,对字符串的处理还真给笔者出了不少难题。不过,借助MSDN及相关网络资源,笔者对字符串的处理渐渐熟悉起来。现在此对VC中字符串的处理做一个阶段小结。
我们都知道,在C++中处理字符串可以使用CString,可以使用string,也可以使用char*。CString是Visual C++中最常用的字符串类,string为标准模板类(STL)定义的字符串类,而char*则是C语言编程中最常用的字符串指针。在这里笔者仅仅简要总结一下CString和char*的基本使用,因当下较少使用string,故不再详述。
首先来看CString,笔者对其最经常性的一个用途就是格式化,比如将int、long、double等类型的数据转换为字符串类型,还有在输出调试信息时亦经常用到,如下面的代码所示:
// Output the debug message CString szDebugMsg; szDebugMsg.Format(TEXT("uiSeekSizePos: %I64u, uiStartSizePos: %I64u, uiEndSizePos: %I64u"), uiSeekSizePos, uiStartSizePos, uiEndSizePos); ::OutputDebugString(szDebugMsg); 其次就是char*指针了,通常我们需要将多个char*拼接起来,这可以有多种方法,比如使用strcpy、strncpy可以通过复制的方式将多个字符串进行拼装,或使用strcat来连接多个字符串。而若是需要按特定的格式拼装成一个新的字符串,则可以使用sprintf函数,代码示例如下:
char* pchProtocolName = "rtsp"; char* pchIPAddress = "172.18.10.10"; char* pchFileName = "test.mp3"; unsigned int uiPort = 3001; char* pchUrl = NULL; char const* const chUrlFmt = "%s://%s:%d/%s"; unsigned uiUrlSize = strlen(chUrlFmt) + strlen(pchProtocolName) + strlen(pchIPAddress) + strlen(pchFileName) + sizeof(uiPort); pchUrl = new char[uiUrlSize]; // Write formatted data to a string. sprintf(pchUrl, chUrlFmt, pchProtocolName, pchIPAddress, uiPort, pchFileName); 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/huangxinfeng/archive/2010/06/ 14/5671309.aspx 此外,对于字符串常需要在字符串末尾加上"\0",这时可以采用手动加入或调用c_str()。 在这里还需要提及的就是CString与char*指针之间的转换了。从char*指针转换为CString是非常简单的,只需直接等于其即可,如:
char* pchTest = "Hello, world!"; CString szTest; szTest = pchTest; 而从CString转换为char*指针的话,则可以使用Format,或进行强制转换const char* pchTest = (LPCTSTR)szTest,或使用GetBuffer(int nMinBufLength)方法。需要注意的是宽字符的转换问题,代码示例如下:
CString szMainBuffer; // Get buffer size CHAR* pszBuffer = NULL; int iByteSize = 0, iwcharSize = 0, iLastChar = 0; iwcharSize = _tcslen(szMainBuffer); iByteSize = WideCharToMultiByte( CP_ACP, // UINT CodePage, NULL, // DWORD dwFlags, szMainBuffer, // LPCWSTR lpWideCharStr, iwcharSize, // int cchWideChar, NULL, // LPSTR lpMultiByteStr, 0, // int cbMultiByte, NULL, // LPCSTR lpDefaultChar, NULL // LPBOOL lpUsedDefaultChar ); // Allocate buffer pszBuffer = new char[ iByteSize + 1 ]; iLastChar = iByteSize; memset( pszBuffer, '\0', iByteSize + 1 ); // Convert WideCharToMultiByte( CP_ACP, // UINT CodePage, NULL, // DWORD dwFlags, szMainBuffer, // LPCWSTR lpWideCharStr, iwcharSize, // int cchWideChar, pszBuffer, // LPSTR lpMultiByteStr, iByteSize, // int cbMultiByte, NULL, // LPCSTR lpDefaultChar, NULL // LPBOOL lpUsedDefaultChar ); // Force NULL-terminate pszBuffer[iLastChar] = '\0'; 总之,对于VC中,无论是字符串之间的转换,还是字符串与其他数据类型之间的转换,均有非常多的系统函数或API可供使用,非常方便。
发表评论
-
利用正则表达式 获取FCK上传的图片
2012-07-06 09:45 529/// /// 取得FCK,HTML中所有图片的 URL ... -
在 Oracle 中使用正则表达式[官网]
2012-07-06 09:37 716声明:该文章源于 ... -
DNN读书摘录5-Starter Kit Template
2012-07-06 09:30 698《Professional DotNetNuke Modu ... -
js 操作select和option
2012-07-05 20:45 5321.动态创建select function createS ... -
基于quartz任务调度组件的使用
2012-07-03 13:43 10742.0版本的aop框架中集成了quartz任务调度组件,该 ... -
flex拖动图片到Canvas时,一定要设定背景色
2012-07-02 10:44 752最近的项目用到flex拖动技术,网上查了些资料,实现了拖动 ... -
Flex 转向URL
2012-07-02 10:44 621http://hi.baidu.com/wptad/blo ... -
flex 保存控件为jpg或png
2012-07-02 10:44 523var bitmapData:BitmapData = n ... -
Flex4 uint颜色值和16进制颜色互转
2012-07-02 10:44 554前几天遇到Flex需要用uint来表示颜色值的问题, ... -
探究 Flex 组件的生命周期
2012-07-01 00:23 495简介: 最为新一 ... -
flex RSL模式
2012-07-01 00:23 460有过FLEX,RIA产品或 ... -
Flex 4 新体验
2012-07-01 00:23 481直到最近才开始真 ... -
AS3.0相关知识
2012-07-01 00:22 551as3.0 2010-01-06 0 ...
相关推荐
本程序中用赋值语句给num和name两个成员赋值,name是一个字符串指针变量。用scanf函数动态地输入sex和score成员值,然后把boy1的所有成员的值整体赋予boy2。最后分别输出boy2 的各个成员值。本例表示了结构变量的...
◆怎样才能在VC里产生一个唯一的字符串◆ 31 ◆如何隐藏进程(在系统状态栏和进程列表里不可见)◆ 31 ◆如何得到一个确定大小的视?◆ 31 ◆如何实现点击窗口任意地方拖动窗口?◆ 32 ◆如何在启动时阻止MDI应用程序...
4.6.4 小结 141 4.6.5 在ctermview类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手v2.2编程 147 5.1 建立scomm程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与...
3.3.5 VC编译小结 3.4 查看调试信息 3.4.1 打印调试语句 3.4.2 查看调试语句 3.5 手动加载NT式驱动 3.6 编写程序加载NT式驱动 3.6.1 SCM组件和Windows服务 3.6.2 加载NT驱动的代码 3.6.3 ...
3.3.5 VC编译小结 3.4 查看调试信息 3.4.1 打印调试语句 3.4.2 查看调试语句 3.5 手动加载NT式驱动 3.6 编写程序加载NT式驱动 3.6.1 SCM组件和Windows服务 3.6.2 加载NT驱动的代码 3.6.3 ...
last login:Tue ,Nov 18 10:00:55 on vc/1 上面显示的是登录星期、月、日、时间和使用的虚拟控制台。 4.应用技巧 Linux 是一个真正的多用户操作系统,可以同时接受多个用户登录,还允许一个用户进行多次登录。这...
4.6.4 小结 141 4.6.5 在ctermview类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手v2.2编程 147 5.1 建立scomm程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与...
4.6.4 小结 141 4.6.5 在CTermView类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手V2.2编程 147 5.1 建立SCOMM程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与接收...
4.6.4 小结 141 4.6.5 在ctermview类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手v2.2编程 147 5.1 建立scomm程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与...
4.6.4 小结 141 4.6.5 在CTermView类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手V2.2编程 147 5.1 建立SCOMM程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与接收...
5.21.3 在日期和时间选择器控件中使用自定义格式字符串 254 5.21.4 在日期和时间选择器控件中使用回调字段 254 5.21.5 处理日期和时间选择器控件中的通知消息 256 5.22 Visual C++ 2010 Month Canlendar控件...
老版本的TinyXML“保留”了字符实体,而在新版本中它们会被转化成字符串。 另外,所有字符都可以用它的Unicode编码数字来指定, " "和" "都表示不可分的空格字符。 打印 TinyXML有几种不同的方式来打印输出,...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
◆怎样才能在VC里产生一个唯一的字符串◆ 31 ◆如何隐藏进程(在系统状态栏和进程列表里不可见)◆ 31 ◆如何得到一个确定大小的视?◆ 31 ◆如何实现点击窗口任意地方拖动窗口?◆ 32 ◆如何在启动时阻止MDI应用程序...
(72)为什么DLL在字符串表中找不到字符串 157 (73)关于复选框的文本颜色 158 (74)系列化与版本的问题 159 (75)在一个控件内检测并使用ON_COMMAND消息 162 (76)为何MDI程序中有子窗口打开时主应用程序不能关. 163 (77)...
1.7.4 小结 22 1.8 多文件程序的结构 22 1.9 常用函数 24 第二章 如何说得更地道 28 2.1 定义和使用类 28 2.2 类的构造函数 31 2.3 类的静态成员 32 2.4 运算符重载 33 2.5 类的继承 36 2.6 虚函数和抽象类 ...
Visual c++ MFC扩展编程实例及源代码,非常经典的学习教材 ...15.5 实例64:二进制字符串 352 15.6 实例65:重新启动计算机 356 15.7 实例66:获得可用磁盘空间 357 15.8 实例67:闪烁窗口和文本 358