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

Posted

技术标签:

【中文标题】字符串向量,每个字符串的长度和 c++ 中的 strlen【英文标题】:vector of string, each strings length and strlen in c++ 【发布时间】:2013-11-21 11:56:34 【问题描述】:

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

V/ChromiumHTTPDataSourceSupport(1544):在 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

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

【问题讨论】:

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

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

【讨论】:

以上是关于字符串向量,每个字符串的长度和 c++ 中的 strlen的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中的向量存储

如何在 C++ 中的字符串向量中找到重复的单词?

如何将字符串添加到 C++ 中无序映射中的字符串向量

C++ 轴对齐矩形操作向量和字符串

字符串、列表或其他东西的向量? C++

用于对字符串向量进行排序的比较函数(每个字符串都是一个数字)C++