请问strlen能计算C++中字符串变量的长度吗?还是只能计算C风格的字符串的长度??谢谢!!

2024-10-31 15:17:35
推荐回答(3个)
回答1:

C中 string 是char 数组。strlen()的参数是char数组的首地址,他计算方式是找到字符串结束符'/0'。
C++中,string是一个类,他自己具有成员函数length();不过他需要对象去调用,即,string str;//申明 对象str
int str.length(void);
下面这段c++代码,讲解了c++中string 的和c中string的不同
#include
using namespace std;
int main()
{
string str="hello!";
const char *p;
p=str.data();
cout< return 0;
}

回答2:

只能计算C风格的字符串,但是C++中的字符串也是C风格的

回答3:

strlen的原型是:
size_t strlen(const char*);
从中可以看出,strlen只接受const char*或char*的参数(或const char[]/char[]类型的能退化为对应指针的数组)。而对于元素类型为wchar_t的C风格宽字符串,则需要使用标准库函数wcslen代替strlen。
在C++中,以std::string为代表的字符串是class类型,它们的实例不能作为strlen的参数。要用strlen计算string的串长,可以用string的成员函数c_str()得到字符串指针后再调用(c_str()和data()类似,但是前者保证返回的内部存储的字符串指针后若干字节存在结束符,所以这里应该用前者)。但更推荐等价的方法,使用成员函数length()或size()(两者完全等价),可以利用string的内部实现保留的长度直接返回,而无需strlen从头开始对有效字符计数,相对而言效率高于strlen(字符串越长体现得越明显)。
具体示例:
string s = "123";
printf("%d\n",s.length());
printf("%d\n",s.size());
printf("%d\n",strlen(s.c_str()));
上面三条语句的作用是一样的,但前两条语句效率较高。
对于宽字符串,语法类似:
wstring ws = L"123";
printf("%d\n",ws.length());
printf("%d\n",ws.size());
printf("%d\n",wcslen(ws.c_str()));
====
[原创回答团]