2013-11-21 61 views
1

我有一個字符串向量。我需要找到每個字符串的長度。然後我假設當我將每個字符串轉換爲char數組並在char數組上執行strlen時,值應該匹配。
更好的解釋:下面是代碼向量的字符串,每個字符串的長度和strlen在C++中

VerifyX509CertChain(
    const std::vector<std::string> & cert_chain, 
    const std::string& hostname, 
    const std::string& auth_type) 
{ 

    const unsigned char* buf; 
    const char* str; 
    int vec_size = cert_chain.size(); 
    for (int i = 0; i < vec_size; i++) 
    { 

     str = cert_chain[i].c_str(); 
     MY_LOGV(StringPrintf("VerifyX509CertChain,string size %s %s", str, cert_chain[i].c_str()).c_str()); 
     int string_size = cert_chain[i].size(); 
     int string_len = cert_chain[i].length(); 
     MY_LOGV(StringPrintf("VerifyX509CertChain,string size %d %d", string_size, string_len).c_str()); 
     int string_size1 = strlen(str); 
     int string_size2 = strlen(cert_chain[i].c_str()); 
     MY_LOGV(StringPrintf("VerifyX509CertChain,char size %d %d", string_size1, string_size2).c_str()); 
    } 
} 

結果,我得到的是:

V/ChromiumHTTPDataSourceSupport(1544):VerifyX509CertChain,字符串的大小1326 1326

V/ChromiumHTTPDataSourceSupport(1544 ):VerifyX509CertChain,字符大小32 32

V/ChromiumHTTPDataSourceSupport(1544):in SSL_CTX_use_certificate1

V/ChromiumHTTPDataSourceSupport(1544):VerifyX509CertChain,字符串大小985 985

V/ChromiumHTTPDataSourceSupport(1544):VerifyX509CertChain,炭尺寸32 32

V/ChromiumHTTPDataSourceSupport(1544):在SSL_CTX_add_extra_chain_cert1

V/ChromiumHTTPDataSourceSupport(1544):VerifyX509CertChain,字符串大小897 897

V/ChromiumHTTPDataSourceSupport(1544):VerifyX509CertChain,炭尺寸32 32

我覺得這是一個奇怪的behviour作爲cert_chain[i].size()回報1326,985和897,但strlen(str)strlen(cert_chain[i].c_str())總是返回32 我預計這兩個值是相同的,我的意思是cert_chain[i].sizestrlen(str)之間,但它們是不同的。爲什麼這樣呢? 請澄清這個疑問。在此先感謝

+0

代碼的輸出不符,請如果你正在使用的std :: string類型修復 – Les

+0

,不使用strlen()。就這麼簡單。如果你可以避免在不使用std :: string類型時使用strlen(),那就更好了。 –

回答

7

C++字符串可以包含任何字節,包括NULL值("\0"),它們被strlen視爲結束符。

例子:

std::string s("\0",5); // std::string ss("a",3) gives "aaa" 
std::cout << s.size() << " " << strlen(s.c_str()) << std::endl; 

輸出: 5 0

+0

好的,這很有幫助。 – archana