文档章节

string, CString, char[]与ASCII的字符表示

colorlesswind
 colorlesswind
发布于 2015/04/22 13:57
字数 576
阅读 145
收藏 2

    对于字符串的处理在C++中可谓是一个颇为棘手的问题,而像JAVA和C#这种基于托管的平台则不存在此类问题。

    我们先来讨论一下memcpy和strcpy这两个方法。

void* memcpy(void *memTo, const void *memFrom, size_t size);
char* strcpy(char * dest, const char * src);

    这两个方法的区别主要有一下3个:

    1. 复制的内容不同,strcpy只能复制字符串,而memcpy则可以复制任何的内容,例如char[],int,struct,class等。

    2. 复制的方法不同,strcpy不需要指定要复制的长度,当遇到在src字符串中的“\0”(空字符)时才停止复制,因此很容易出现溢出的现象。而memcpy则是根据其第三个参数决定要复制的长度的,避免了此类问题。

    3. 用途不同,通常在复制字符串时用strcpy,而在复制其他类型的数据时则一般采用memcpy。

    4. 若要复制ASCII为1的SOH,在memcpy中要用\0表示,如果直接输入0,则代表0这个字符。

    需要注意的是:

    在发送与设备之间通讯的命令的情况下,很多时候命令会包含空字符null,这种时候就要慎用strcpy了,因为strcpy在遇到空字符的时候会终止复制动作,致使空字符后面的命令没有复制。

 

    string和CString的格式化输出:

CString strTemp_1, strName;
int nAge = 10;
strName = "小明";
strTemp.Format("%s今年%d岁", strName, nAge);
//--------------------------------------------------------
#include<string>
#include<sstream>
 using namespace std;
 ostringstream ostr;
 string strTemp_1, strTemp_2;
 strTemp_1 = "小明";
 strTemp_2 = "今天天气很好";
 int nAge = 10;
 ostr << strTemp_2 << "," << strTemp_1 << "今年" << nAge << "岁。";
  string strDest = ostr.str();

   注意:在下一次使用ostr时会与前面格式化的字符串相加,因此需要清空再使用。

 

    string, CString, 空字符null

    需要注意的是string与CString都不支持空字符的输入,即如果string与CString类型检测到字符串中存在空字符时,会自动去除空字符并对字符串进行缩减。所以,若要对空字符进行储存,则要使用char型数组,例如:

char chName[10];
chName[2] = 0; //空字符
chName[3] = '0';  //字符0

 

© 著作权归作者所有

colorlesswind
粉丝 1
博文 40
码字总数 9065
作品 0
广州
私信 提问
CString,int,string,char*之间的转换

《C++标准函数库》中说的 有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”0“的字符串数组 2,c_str(),返回有”0“的字符串数组 3,copy() .....................

橘子红了呐
2017/11/15
0
0
Unicode下CString(wchar_t)转换为 char*

wstring MultCHarToWideChar(string str) { //获取缓冲区的大小,并申请空间,缓冲区大小是按字符计算的 int len=MultiByteToWideChar(CPACP,0,str.cstr(),str.size(),NULL,0); TCHAR *buff......

shzwork
05/11
3
0
VC6中的MBCS和UNICODE编码

【转】 今天写的一段代码涉及到MBCS编码和UNICODE编码的相互转换,查了一下MSDN的相关资料,整理如下: 在VC6中,默认使用MBCS编码,即多字节字符,实际就是支持大于0x80的ASCII码。这样,一...

zhizii
2010/12/08
992
0
CString, BSTR, LPCTSTR 概念

CString是一个动态TCHAR数组, BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵 ) LPCTSTR只是一个常量的TCHAR指针。 CString 是一个完全独立的类,动态的TCHAR数组,封装了+等操作符...

AlphaJay
2010/08/27
800
0
CString,Char*,string 互相转换(转)

《C++标准函数库》中说的 有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”0“的字符串数组 2,c_str(),返回有”0“的字符串数组 3,copy() .....................

徐燕
2011/04/15
5.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
46分钟前
5
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
9
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
15
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
3.3K
25

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部