已有定义:char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是 ()(长度使用sizeof比较)
#include <iostream> #include <cstring> using namespace std; int main() { char a[]="xyz",b[]={'x','y','z'}; cout << strlen(a) << endl; cout << strlen(b)<< endl; cout << sizeof(a)<< endl; cout << sizeof(b)<< endl; return 0; }
b[]={'x','y','z'} //长度未知,因为数组最后没有结束符'\0',不知道后面什么位置有'\0',所以结果变成了7,不同的运行可能有不同的结果,所以未知
b[4]={'x','y','z'} 等价于 b[4]={'x','y','z','\0'} 等价于 b[]={'x','y','z','\0'} //这样的话strlen长度为3
而a[]是个字符串,结尾有'\0',所以它的strlen为3 sizeof操作符返回的是参数所占的内存大小,a[]是字符串,包含结束符'\0',所以是4个内存大小,而b[]是字符数组,有三个元素,所以为3个内存大小