正在閱讀:C/C++中字符串常量的不相等性及字符串的CopyC/C++中字符串常量的不相等性及字符串的Copy

2005-03-02 09:46 出處:PConline 作者:管寧 責(zé)任編輯:huangpeidan

#include <iostream
 
void main(void

    if("test"=="test") 
    { 
        cout<<"相等"; 
    } 
    else 
    { 
        cout<<"不相等"; 
    } 
}



  上面的代碼我們測試兩個內(nèi)容為test的字符串常量是否相等,按照常理,應(yīng)該是相等的,這些在一些過程式語言中會得到相等的結(jié)論,但在c/c++卻不是這樣。

  為什么呢?

  答案在這里:因為字符串常量存儲在計算機(jī)內(nèi)存中,兩個字符串常量的地址均不相同,所以這樣的比較自然就不會得到我們所需要的結(jié)果,如果要進(jìn)行是否相等的比較應(yīng)該使用strcmp()這個涵數(shù)進(jìn)行比較!

#include <iostream
#include <string
using namespace std; 
void main(void)   
{   
    if(strcmp("test","test")==0)   
    {   
        cout<<"相等";   
    }   
    else   
    {   
        cout<<"不相等";   
    } 
    cin.get(); 
}

  strcmp()的函數(shù)原形是,int strcmp(const char* str1,const char* str)

  相當(dāng)將會返回一個等于0的整數(shù),不相等的時候?qū)祷匾粋非0整數(shù)。

#include <iostream
#include <string
using namespace std; 
void main(void)   
{   
    char test[]="test str!"; 
    char str[15]; 
    strcpy(str,test); 
    cout<<str<<endl; 
 
    int a[]={1,2,3,4,5}; 
    int b[5]; 
    memcpy(b,a,sizeof(a)); 
    for(int i=0;i<5;i++) 
    { 
        cout<<b[i]<<","; 
    } 
    cin.get(); 
}

  上面的代碼中的strcpy用來處理字符串?dāng)?shù)學(xué)組的copy,由于字符串?dāng)?shù)組屬于const char*也就是常量指針?biāo)允遣荒苡胊="test str!";的方式賦值的,接在后面的memcpy用于處理非\0結(jié)尾的數(shù)組的copy處理,memcpy第三個參數(shù)是設(shè)置b在內(nèi)存中所需要的內(nèi)存空間大小所以用sizeof(a)*sizeof(int)來處理。

302 Found

302 Found


Powered by Tengine
tengine