1. 程式人生 > >字符串比較、字符指針和字符串的存儲位置

字符串比較、字符指針和字符串的存儲位置

enc 空字符 pan 實現 stat strcmp 指針 比較 兩個指針

字符指針==的意義:判斷兩個指針是否指向同一地址

字符指針存在棧裏,字符串存在字符數組裏(靜態數組在棧裏)或者在字符常量區,字符常量區沒有重復的字符串

int main()
{
    char *s1 = "abc";//s1在棧上,"abc"在字符常量區,s3也指向這個"abc"
    char *s3 = "abc";
    char s2[] = "abc";//"abc"在棧上
    char *s4 = new char[10];
    char *s5 = static_cast<char*>(malloc(10));
    cout << &(s2[0
]) << endl;//以下四條語句都是輸出abc cout << &s1[0] << endl; cout << &s3[0] << endl; cout << s1 << endl; cout << strcmp(s1, s2) << endl; cout << (s1 == s2) << endl;//判斷是否指向同一地址 cout << (s1 == "abc") << endl; cout
<< (s2 == "abc") << endl; printf("%p,%p,%p", s1, s2, s3); }

memcpy拷貝字符串,第三個參數需要自己控制,strcpy不需要,只需要兩個指針就行;下面的代碼問題在哪兒?

 1 void AddStr(char *pBuffer, char*pStrSrc1, char*pStrSrc2)
 2 {
 3     memcpy(pBuffer, pStrSrc1, strlen(pStrSrc1));
 4     memcpy(pBuffer + strlen(pStrSrc1), pStrSrc2, strlen(pStrSrc2));//
沒有復制pStrSrc2結尾的空字符到pBuffer 5 //memcpy(pBuffer + strlen(pStrSrc1), pStrSrc2, strlen(pStrSrc2)+1); 6 *(pBuffer + strlen(pStrSrc1) + strlen(pStrSrc2)) = \0; 7 } 8 void TestFunc() 9 { 10 char ayBuffer[256]; 11 char* pStrSrc1 = "our site is "; 12 char* pStrSrc2 = "10jqka.com.cn"; 13 AddStr(ayBuffer, pStrSrc1, pStrSrc2); 14 printf(ayBuffer); 15 16 }

AddStr用strcpy來實現,strcpy會自動在結尾加上空字符,strcpy比mencpy多了一個空字符處理時間,只調用了一次strlen,兩者都遍歷了兩個字符串各一次

1 void AddStr(char *pBuffer, char*pStrSrc1, char*pStrSrc2)
2 {
3     
4     strcpy(pBuffer, pStrSrc1);
5     strcpy(pBuffer + strlen(pStrSrc1), pStrSrc2);//從上次空字符處開始覆蓋
6 }

字符串比較、字符指針和字符串的存儲位置