【发布时间】:2019-04-23 11:45:10
【问题描述】:
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
}
这是它的输出:size is 11
数组中没有任何地方是 11。 我应该怎么做才能使函数输出正确的大小,即 7?我不想设置 for 循环。
【问题讨论】:
-
strlen用于以空字符结尾的字符串。您的 char 数组不包含 0 值,因此strlen会跑掉并停在内存中某处的第一个 0 处。 -
strlen/std::strlen遵循以\0结尾的chars 序列表示给定字符串的约定。您只是通过“机会”获得 11,实际上在未完成\0的数组上调用strlen会产生未定义的行为。 C/C++ 中的数组本身不保持长度,请查看std::string或std::array以获得更高级的内容。 -
有什么理由不使用
std::array?
标签: c++ arrays pointers char size