打印的字符串数组长度,而不是C++中的数组项数

String array length printed instead of the Number of Array Items in C++

本文关键字:数组 C++ 字符串 打印      更新时间:2023-10-16

我尝试了这个数组声明并检查了大小:

string path1[1] = {"D:\Users\user-pc\Desktop\testing\inputs\xml_source_example.xml"};
cout << path1->length();

并检查了尺寸:

62

我希望输出为 1,所以我尝试使用 ->size(),但我仍然得到 62。我知道数组中的第一个项目的长度为 62,但我想要数组中的项目数。

如何获取数组中有多少个项目?

试试这个,利用std::beginstd::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]);

这将根据您的要求工作,但是当指针出现时,它将失败。但根据您的要求,这就足够了。