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

    对于字符串的处理在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

 

转载于:https://my.oschina.net/u/2314763/blog/405033

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值