打印的字符串数组长度,而不是C++中的数组项数
String array length printed instead of the Number of Array Items in C++
我尝试了这个数组声明并检查了大小:
string path1[1] = {"D:\Users\user-pc\Desktop\testing\inputs\xml_source_example.xml"};
cout << path1->length();
并检查了尺寸:
62
我希望输出为 1,所以我尝试使用 ->size(),但我仍然得到 62。我知道数组中的第一个项目的长度为 62,但我想要数组中的项目数。
如何获取数组中有多少个项目?
试试这个,利用std::begin
和std::end
:
std::end(path1) - std::begin(path1);
或者,您可以分配自己的数组大小函数:
#include <cstddef> // for std::size_t
template <typename T, std::size_t N>
constexpr std::size_t size(const T(&)[N])
{
return N;
}
用法:
#include <iostream>
int main()
{
int a[42];
std::cout << size(a) << std::endl;
}
在 c++ 中,数组不是为您管理的,并且始终是在声明时设置的长度。在 STL 中管理许多类型的容器。我会毫不犹豫地尝试 Vectors,如果我必须做一个建议,但看看是否有其他的更适合您的需求。
对于 C/C++ 中任何静态分配的array
,请使用 sizeof(array)/sizeof(*array)
以获取条目数。
注意#1:
计算将在编译期间(而不是在运行时)进行。
注意#2:
int array[10]; // Static allocation
int array[] = new int[10]; // Dynamic allocation
注意#3:
只能在声明范围内应用此方法。
例如,如果在函数内声明array
,则只能在该函数的作用域中应用此方法。不能在接收array
作为参数的任何其他函数中应用此方法,因为它被视为该函数中的指针。
如果数组是在源文件中全局声明的,则可以在该文件中的所有函数中应用此方法。
有几种解决方案。 胡安乔潘扎和巴拉克·马诺斯已经给出了 2 个。这是第三个
#include <type_traits>
int a[12];
std::cout<<std::extent<decltype(a)>::value<<std::endl;
但是考虑使用 std::array 而不是 old-C syle 数组。
尝试使用
string path1[1] = "D:\Users\user-pc\Desktop\testing\inputs\
xml_source_example.xml";
cout << sizeof(path1)/sizeof(path1[0]);
这将根据您的要求工作,但是当指针出现时,它将失败。但根据您的要求,这就足够了。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '