我有一個字符串向量。我需要找到每個字符串的長度。然後我假設當我將每個字符串轉換爲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].size
和strlen(str)
之間,但它們是不同的。爲什麼這樣呢? 請澄清這個疑問。在此先感謝
代碼的輸出不符,請如果你正在使用的std :: string類型修復 – Les
,不使用strlen()。就這麼簡單。如果你可以避免在不使用std :: string類型時使用strlen(),那就更好了。 –