c++ - 使用 strlen() 查找字符串数组的长度

标签 c++ string string.h

我一直试图找到 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::stringc_str() 方法中,您将获得指向空终止字符串中第一个 char 的指针。

关于c++ - 使用 strlen() 查找字符串数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919254/

相关文章:

c++ - 将类的属性泄露给它的组件

javascript - 正则表达式测试函数不返回相同的依赖引号

string-comparison - strcmp() 对于相同字符串比较返回不同的值

c - <string.h> 中的 strset 函数,C

c++ - QT插件编译问题

c++ - IIS 调用 OLEDB API 失败

c++ - 堆上的用户定义变量在 while 循环中被销毁

Java,检查字符串是否为回文。不区分大小写

php - 如何将多维数组放入双引号字符串?

c - 字符串打印额外值 C 编程