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

时间:2019-04-23 11:45:10

标签: c++ pointers

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循环。

2 个答案:

答案 0 :(得分:5)

不能。仅从physico = read.csv("site16.csv",row.names=1, sep = ';') snail = read.csv("snails1_6.csv",row.names=1, sep = ';') phys.rda <- rda(snail~.,physico) summary(phys.rda) RsquareAdj(phys.rda)$r.squared # R^2 RsquareAdj(phys.rda)$adj.r.squared # adjusted R^2 开始,它将如何知道数组的大小?解决方法可能是具有哨兵值。对于const char arr[],该标记值在字符串末尾是strlen。将其添加到您的数组中:

'\0'

此外,函数中不存在char a[8] = { 'a', 'b', 'c','d', 'c', 'b', 'a', '\0' }; ,您可能打算使用a来代替:

arr

这将为您提供std::cout << "size is: " << strlen(arr) << std::endl; 的预期输出。另外,您应该始终将7函数声明为main。不建议使用隐式int main且它是非标准的,并非所有编译器都支持它。

答案 1 :(得分:5)

strlen的先决条件是参数指向以空值结尾的数组(字符串)。您的数组不是以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中引入)。