字符串向量,每个字符串长度和C++中的字符串

字符串向量,每个字符串长度和C++中的字符串,c++,string,vector,C++,String,Vector,我有一个字符串向量。我需要找出每根绳子的长度。然后我假设当我将每个字符串转换为char数组并对char数组执行strlen时,值应该匹配。 更好的解释:这是代码 VerifyX509CertChain( const std::vector<std::string> & cert_chain, const std::string& hostname, const std::string& auth_type) { const u

我有一个字符串向量。我需要找出每根绳子的长度。然后我假设当我将每个字符串转换为char数组并对char数组执行strlen时,值应该匹配。 更好的解释:这是代码

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

V/ChromiumHTTPDataSourceSupport 1544:在SSL中\u CTX\u使用\u证书1

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

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

V/ChromiumHTTPDataSourceSupport 1544:在SSL中\u CTX\u添加\u额外\u链\u证书1

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

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

我发现这是一个奇怪的现象,因为cert_chain[I]。大小返回1326985和897,但strlenstr或strlencert_chain[I]。c_str总是返回32。 我希望这两个值是相同的,我的意思是在cert_chain[I].size和strlenstr之间,但它们是不同的。为什么会这样??
请澄清这一疑问。提前感谢

C++字符串可以包含任何字节,包括空值\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

C++字符串可以包含任何字节,包括空值\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

您的代码与输出不匹配,请修复。如果您使用的是std::string类型,请不要使用strlen。就这么简单。如果在不使用std::string类型时可以避免使用strlen,那就更好了。您的代码与输出不匹配,请修复如果您使用的是std::string类型,请不要使用strlen。就这么简单。如果在不使用std::string类型时可以避免使用strlen,那就更好了。