C++为什么strlen函数不能测量虚参string的长度

我想要对一个字符串进行长度的测量,我新建了一个函数,但是使用strlen时候报错了
代码片段在

int test(string s){
    cout<<strlen(s);
    int number=0;
    for(int i = 0;i<17;i++){
        number += (s[i]-'0')*quanzhong[i];
    }
    number%=11;
    //cout<<number;
    return number;
}

int main()
{
    string s = "";
    getline(cin,s);
    int ans = test(s);
    if(match[ans] == s[17]-'0')
        cout<<"正确";
}
string用length
cout<<s.length()
strlen是计算char */char[]的,string非要用,需要用 c_str()转换成char *
cout << strlen(s.c_str());

strlen只能用来求得c类型的字符串的长度,string类型的长度有string专有的成员函数length()得到字符串长度

如果实在想用strlen来测量string的长度,可以用如下方法:

string s = "hello world";
cout<<strlen(&*s.begin())<<endl; // 取s的第一个字符的地址给strlen
cout<<strlen(s.c_str())<<endl; //将string类型的s转换为c类型的字符串,再使用strlen

别嫌弃我没有声望,毕竟我刚登录,有无穷的希望,谁能知道我到底怎样呢?

我们来看一下函数原型:
C:

extern unsigned int strlen(char *s);

C++/VC++

size_t strlen(const char *string);

其中,size_t是:

typedef unsigned int size_t;

所以,stringlen()只能求字符数组或字符指针(不还是字符数组吗?)的长度。

以下代码合法:

char *a;
char b[100];
scanf("%s %s", a, b);
printf("%d %d",strlen(a), strlen(b));

而C++独有的string类型可以这样求长度:

string a;
cin >> a;
cout << a.size() << endl;
cout << a.length() << endl;
cout << strlen( a.c_str() ) << endl;

有问题,找百度:C++为什么strlen函数不能测量虚参string的长度