字符串向量,每个字符串长度和clen中的strlen

时间:2013-11-21 11:56:34

标签: c++ string vector

我有一个字符串向量。我需要找到每个字符串的长度。然后我假设当我将每个字符串转换为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,char size 32 32

     

V / ChromiumHTTPDataSourceSupport(1544):在SSL_CTX_use_certificate1中

     

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

     

V / ChromiumHTTPDataSourceSupport(1544):VerifyX509CertChain,char size 32 32

     

V / ChromiumHTTPDataSourceSupport(1544):在SSL_CTX_add_extra_chain_cert1中

     

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

     

V / ChromiumHTTPDataSourceSupport(1544):VerifyX509CertChain,char size 32 32

我觉得这是一个奇怪的行为,因为cert_chain[i].size()返回1326,985和897,但strlen(str)strlen(cert_chain[i].c_str())总是返回32。 我希望两个值都相同,我的意思是在cert_chain[i].sizestrlen(str)之间,但它们是不同的。为什么会这样? 请澄清这个疑问。提前致谢

1 个答案:

答案 0 :(得分:7)

C ++字符串可以包含任何字节,包括NULL值("\0"),它们被strlen视为endline字符。

示例:

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

输出: 5 0