如何使用 c++ 中的函数返回 char 数组的大小

How do i return the size of char array with a function in c++?

本文关键字:char 数组 返回 函数 何使用 c++      更新时间:2023-10-16
void printsize(const char arr[]){
    cout<<"size is: "<<strlen(arr)<<endl;

}    
main(){
    char a[7] = {'a', 'b', 'c','d', 'c', 'b', 'a'};
    printsize(a)
    return 0
}

下面是它将输出的内容:大小为 11

数组没有 11 的位置。我应该怎么做才能使函数输出正确的大小,即 7?我不想设置一个 for 循环。

你不能。仅从const char arr[],它怎么会知道数组的大小?解决方法可能是具有哨兵值。在 strlen 的情况下,该哨兵值是字符串末尾的一个''。将其添加到阵列中:

char a[8] = { 'a', 'b', 'c','d', 'c', 'b', 'a', '' };

此外,a函数中不存在,您可能打算改用arr

std::cout << "size is: " << strlen(arr) << std::endl;

这为您提供了7的预期输出。附带说明一下,您应该始终将main函数声明为 int main 。隐式int是不鼓励和非标准的,并非所有编译器都支持它。

strlen 的前提条件是参数指向以 null 结尾的数组(字符串(。您的数组不是以 null 结尾的,因此您将该数组传递(指向(该数组的指针strlen 违反了该前提条件。

违反标准函数前提条件的程序的行为是未定义的。

如何使用 c++ 中的函数返回 char 数组的大小?

您可以使用模板获取数组的大小:

template <class T, std::size_t N>
std::size_t
size(const T (&array)[N])
{
    return N;
}

用法:

char a[7] = {'a', 'b', 'c','d', 'c', 'b', 'a'};
cout<<"size is: "<<size(a)<<endl;

请注意,您不需要自己编写此模板,因为标准库已经为您提供了它。它被称为std::size(在C++17中引入(。