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

时间:2014-01-17 11:30:17

标签: c++ arrays string size

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

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

并检查尺寸:

  
    

62

  

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

如何获取阵列中有多少项?

5 个答案:

答案 0 :(得分:3)

尝试此操作,利用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;
}

答案 1 :(得分:1)

对于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 :(得分:1)

在c ++中,不管理数组,并且始终是声明时设置的长度。有许多类型的容器在STL中进行管理。我会毫不犹豫地尝试向量,如果我不得不做出推荐但是看看其他任何一个是否更符合您的需求。

答案 3 :(得分:0)

有几种解决方案。已经有2个由juanchopanza和barak manos给出。这是第三个

#include <type_traits>

int a[12];
std::cout<<std::extent<decltype(a)>::value<<std::endl;

但是考虑使用std :: array而不是old-C syle数组。

答案 4 :(得分:0)

尝试使用

string path1[1] = "D:\\Users\\user-pc\\Desktop\\testing\\inputs\\
xml_source_example.xml";
cout << sizeof(path1)/sizeof(path1[0]);

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