关于strlen函数的一个不解

char arr[]={1,2,3,4,5,6,7,8};
cout<<strlen(arr);

为什么以上语句输出的值是19?

两种定义方式:
char arr[9] = {'1', '2', '3', '4', '5', '6', '7', '8'}
char arr[] = {'1', '2', '3', '4', '5', '6', '7', '8', '\0'} //明确以'\0'结尾。
意识没有加单引号,二是没有以'\0'结尾。
具体原因就不太清楚了。

因为strlen()函数是根据'\0'来判断字符数组结束的,也是根据它来计算长度的。若定义时没有“\0”,则会从数组的存储位置开始直到找到一个空字符,并得到所谓的字符串长度

应该说你这个代码犯了几个错误。
就这段代码来说,不应该用strlen,应该用sizeof(arr)
如果想用strlen,那么就应该写成char arr[9]={1,2,3,4,5,6,7,8};