无法将字符串转换为const char

时间:2012-08-15 14:08:30

标签: c++ string char strlen

我有这个功能,编译器对我说“无法将字符串转换为const char”。

void 
DramaticLetters(string s, short TimeLength)
{
    for(int i = 0, sLen = strlen(s); i < sLen; i++){
        cout << s[i];
        Sleep(TimeLength);
    }
}

strlen有问题,我想

5 个答案:

答案 0 :(得分:4)

strlen()适用于C const char*个字符串。要获取字符串s的长度,请使用s.size()s.length()。如果您想从string获取C字符串,请使用s.c_str()

虽然C ++使似乎 const char*string可以互换,但只有在将const char*转换为string时才会采用一种方式。< / p>

您也没有理由要使用strlenstrlen很可能是使用循环定义的,它永远不会像size()那样有效,而string最有可能只是string类的长度属性的getter。在调用没有C ++替代的C函数时,只将{{1}}转换为C字符串。

答案 1 :(得分:1)

您不应该混合使用C和C ++字符串函数。而不是strlen()(C风格的函数),请使用string::size()

for(int i = 0, sLen = s.size(); i < sLen; i++) {
    cout << s[i];
    Sleep(TimeLength);
}

这里有一个reference,其中包含string类的所有方法。

答案 2 :(得分:1)

正如克里斯在评论中所说,strlen用于const char *,而你传递的是string。而不是

for(int i = 0, sLen = strlen(s); i < sLen; i++){
    cout << s[i];
    Sleep(TimeLength);
}

使用此:

for(int i = 0, sLen = s.length(); i < sLen; i++){
    cout << s[i];
    Sleep(TimeLength);
}

答案 3 :(得分:0)

strlenchar const *上运作。如果您真的想要,可以strlen(s.c_str()),但std::string有很多功能,包括length()方法,它返回字符串中的字符数

答案 4 :(得分:0)

几点评论:

  • 您不修改函数中的字符串,因此最好将const引用传递给它(const string&amp; s)

  • 字符串本身定义了获取其长度的方法 - s.size()和s.length()都可以。另外的好处是这种方法在复杂性方面是恒定的,而不是strlen的线性复杂性

  • 如果您真的想使用strlen,请使用s.c_str():strlen(s.c_str())