對於字符串的處理在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