我一直试图找到 string
的长度,它有一个 char
数组,带有 strlen()
函数,但它不是在职的。
我使用的代码是这样的:
string s[]={"a","b","c"};
int len = strlen(s.c_str());
它会产生以下错误:
"request for member âc_strâ in âwArrayâ, which is of non-class type"
但是当我像这样在 string
上使用这个 strlen()
函数时,它工作正常:
fin.open("input.txt");
string tempStr;
getline(fin, tempStr,'\n');
int len = strlen(tempStr.c_str());
我在这里缺少什么?我知道我可以用
找到string s[]
的长度
int size = sizeof( s ) / sizeof( s[ 0 ] );
但是为什么我不能使用strlen()
。谁能解释一下这是怎么回事?
最佳答案
使用辅助函数模板很容易找到任何类型的固定大小数组的长度:
#include <cstddef> // for std::size_t
template< class T, size_t N >
std::size_t length(const T (&)[N] )
{
return N;
};
string s[]={"a","b","c"};
std::cout << length(s) << std::endl;
在 C++11 中,该函数将是 constexpr
。
关于strlen ,它会计算 chars
直到找到空终止符 \0
。当您调用 std::string在 c_str()
方法中,您将获得指向空终止字符串中第一个 char
的指针。
关于c++ - 使用 strlen() 查找字符串数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919254/