对于字符串的处理在C++中可谓是一个颇为棘手的问题,而像JAVA和C#这种基于托管的平台则不存在此类问题。数组
咱们先来讨论一下memcpy和strcpy这两个方法。spa
void* memcpy(void *memTo, const void *memFrom, size_t size); char* strcpy(char * dest, const char * src);
这两个方法的区别主要有一下3个:code
1. 复制的内容不一样,strcpy只能复制字符串,而memcpy则能够复制任何的内容,例如char[],int,struct,class等。orm
2. 复制的方法不一样,strcpy不须要指定要复制的长度,当遇到在src字符串中的“\0”(空字符)时才中止复制,所以很容易出现溢出的现象。而memcpy则是根据其第三个参数决定要复制的长度的,避免了此类问题。字符串
3. 用途不一样,一般在复制字符串时用strcpy,而在复制其余类型的数据时则通常采用memcpy。string
4. 若要复制ASCII为1的SOH,在memcpy中要用\0表示,若是直接输入0,则表明0这个字符。class
须要注意的是:stream
在发送与设备之间通信的命令的状况下,不少时候命令会包含空字符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