templateint arrLength(T & arr){ // 实测并不需要额外处理数组长度为0的情况 int n = sizeof(arr)/sizeof(arr[0]); if((typeid(' ') == typeid(arr[0])) && n && (arr[n-1] == ' ')){ // 如为字符串数组返回的是不包括最后' '的长度 --n; } return n; }
注1-例子:
char chs1[] = {'a','b','c'};//{97,98,99}
strlen(chs1) == 4;
sizeof(chs1)/sizeof(chs1[0]) == 3;
arrLength(chs1) == 3;
char chs2[] = {' ','b','c'};//{0,98,99}
strlen(chs2) == 0;
sizeof(chs2)/sizeof(chs2[0]) == 3;
arrLength(chs1) == 3;
char chs3[] = {'a',' ','c'};//{97,00,99}
strlen(chs3) == 1;
sizeof(chs3)/sizeof(chs3[0]) == 3;
arrLength(chs1) == 3;
char chs4[] = "0123";
strlen(chs4) == 4;
sizeof(chs4)/sizeof(chs4[0]) == 5;
arrLength(chs1) == 4;
char chs5[] = {97,98,97,0};
strlen(chs4) == 3;
sizeof(chs4)/sizeof(chs4[0]) == 4;
arrLength(chs1) == 3;//此处判断出错!
注2:
char ch[] = "0123 143";类似这样里面的’ ’会连着后面的数字识别成一个字符’ 12’(8进制);相当于char ch[] = {48,49,50,12,51};,"0123x89123"中的x89同理



