c++ string 与 c风格的字符串区别举例

C++中的string其实应该理解成一个容器, C string理解成一个字符数组, 两者的大概区别这里不多说,一般都应该有所了解,想说明注意的一点是,c++ stl中的string 初始化的时候不会自动加那个null-character (‘\0′)在字符串的最后, 而字符数组则会在编译的时候自动加, 如果人为的在c++ string 上push_back(‘\0′),那么对c++而言这个’\0′属于字符串里面的一个字符而不是作为特殊的字符串的结束, 下面写了个小程序证实这一点:

int main(void) {
    //string class dont have '\0' inserted automaticalyy
    string s1("abcd"); 
    cout<<"length of s1: "<<s1.size()<<endl;   
    cout<<"byte size of s1: "<<sizeof(s1)<<endl;   

    char s2[] = "abcd";
    cout<<"length of s2: "<<strlen(s2)<<endl;   
    cout<<"byte size of s1: "<<sizeof(s2)<<endl;   

    string s3;
    for(int i = 0; i < strlen(s2); ++i)  s3.push_back(s2[i]);   
    s3.push_back('\0');   
    cout<<"s3 = "<<s3<<endl;

    cout<<"s1 == s3? "<<s1.compare(s3)<<endl;
    return 0;

    /**
     * outputs:
     *
     * length of s1: 4
     * byte size of s1: 8
     * length of s2: 4
     * byte size of s1: 5
     * s3 = abcd
     * s1 == s3? -1
     *
     */
}
Written on May 5, 2013