sterlen: 作用求取字符串长度,从内存某个位置开始扫描,直到‘\0’停止,不包含‘\0’.
char arr[] = “abcdef”;
printf("%d\n", strlen(arr));// 6 arr代表首元素地址,从'a'开始到'\0'
printf("%d\n", strlen(arr+0));// 6 arr+0代表首元素地址
printf("%d\n", strlen(*arr));// err 崩溃 *arr 解引用到a,不知从何开始找起,程序崩溃
printf("%d\n", strlen(arr[1]));//err 崩溃 原因同上
printf("%d\n", strlen(&arr));// 6 &arr取到整个元素地址,与首元素地址相同
printf("%d\n", strlen(&arr + 1));//x 随机值 &arr+1取到数组下面的地址,不知道何时遇到'\0'
printf("%d\n", strlen(&arr[0]+1));// 5 取到数组第二个元素的地址
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };//arr中不包含字符'\0'
printf("%d\n", strlen(arr));//x 随机值 不知何时有\0停止
printf("%d\n", strlen(arr + 0));//x 同上
printf("%d\n", strlen(*arr));//err *arr 解引用到a,不知从何开始找起,程序崩溃
printf("%d\n", strlen(arr[1]));//err同上
printf("%d\n", strlen(&arr));//x
printf("%d\n", strlen(&arr + 1));//x
printf("%d\n", strlen(&arr[0] + 1));//x
char *p = "abcdef";//p代表数组的首元素地址
printf("%d\n", strlen(p));//6 整个字符串长度 不包括\0
printf("%d\n", strlen(p + 1));//5 第二个元素开始字符串长度
printf("%d\n", strlen(*p));//err *p是一个具体的值 系统崩溃
printf("%d\n", strlen(p[0]));//err 同上
printf("%d\n", strlen(&p));//x 随机值 p的地址(用二级指针来存放p的地址,也就是地址的地址)之后不知何时遇到\0停止
printf("%d\n", strlen(&p + 1));//x p地址之后的空间不知何时遇到\0停止
printf("%d\n", strlen(&p[0] + 1));//5 第二个元素开始字符串长度
备注
strlen 的使用是接受一个地址,然后开始扫描,直到遇到’\0’.