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

    對於字符串的處理在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
相關文章
相關標籤/搜索