字符串长度的计算:sizeof和strlen的使用
如下示例:
1. char buf[10] = "hello";
printf("sizeof(buf) = %d\n", sizeof(buf)); //10
printf("sizeof(buf[0]) = %d\n", sizeof(buf[0])); //1
printf("strlen(buf) = %d\n", strlen(buf)); 5
注:当数组定义时声明了数组的大小,
sizeof(buf) 会得到定义数组时定义的元素数量,例如这里定义的是10
sizeof(buf[0]) 得到的是数组第一个元素的数量,在这里是1
strlen(buf) 得到的是这个字符串实际的元素个数,这里不包括字符串末尾的'\0'
2. char *p = buf;
printf("sizeof(p) = %d\n", sizeof(p)); //8
printf("sizeof(*p) = %d\n", sizeof(*p)); //1
printf("strlen(p) = %d\n", strlen(p)); 5
注:定义了一个指针指向了字符串数组
sizeof(p) 得到的是这个指针在内存中所占空间的大小,"这里是64位系统,所以指针大小是8"
sizeof(*p) 指针指向的是字符串数组的首元素的首地址,这里指向的是第一个元素,得到的是第一个元素的元素数量,在这里是1
strlen(p) 在这里得到的是指针指向的数组的实际元素数量
3. char buf1[] = "hello";
printf("sizeof(buf1) = %d\n", sizeof(buf1)); //6
printf("sizeof(buf1[0]) = %d\n", sizeof(buf1[0])); //1
printf("strlen(buf1) = %d\n", strlen(buf1)); //5
注:当定义数组时不指定数组的大小,直接给数组赋值
sizeof(buf1) 因为是字符串,并且数组没有定义大小、每个字符串后面都有'\n'结束符,所以这里的到的结果是6
sizeof(buf[0]) 得到的是数组第一个元素的数量,在这里是1
ttrlen(buf1) 得到的是这个字符串实际的元素个数,这里不包括字符串末尾的'\0'
如下示例:
1. char buf[10] = "hello";
printf("sizeof(buf) = %d\n", sizeof(buf)); //10
printf("sizeof(buf[0]) = %d\n", sizeof(buf[0])); //1
printf("strlen(buf) = %d\n", strlen(buf)); 5
注:当数组定义时声明了数组的大小,
sizeof(buf) 会得到定义数组时定义的元素数量,例如这里定义的是10
sizeof(buf[0]) 得到的是数组第一个元素的数量,在这里是1
strlen(buf) 得到的是这个字符串实际的元素个数,这里不包括字符串末尾的'\0'
2. char *p = buf;
printf("sizeof(p) = %d\n", sizeof(p)); //8
printf("sizeof(*p) = %d\n", sizeof(*p)); //1
printf("strlen(p) = %d\n", strlen(p)); 5
注:定义了一个指针指向了字符串数组
sizeof(p) 得到的是这个指针在内存中所占空间的大小,"这里是64位系统,所以指针大小是8"
sizeof(*p) 指针指向的是字符串数组的首元素的首地址,这里指向的是第一个元素,得到的是第一个元素的元素数量,在这里是1
strlen(p) 在这里得到的是指针指向的数组的实际元素数量
3. char buf1[] = "hello";
printf("sizeof(buf1) = %d\n", sizeof(buf1)); //6
printf("sizeof(buf1[0]) = %d\n", sizeof(buf1[0])); //1
printf("strlen(buf1) = %d\n", strlen(buf1)); //5
注:当定义数组时不指定数组的大小,直接给数组赋值
sizeof(buf1) 因为是字符串,并且数组没有定义大小、每个字符串后面都有'\n'结束符,所以这里的到的结果是6
sizeof(buf[0]) 得到的是数组第一个元素的数量,在这里是1
ttrlen(buf1) 得到的是这个字符串实际的元素个数,这里不包括字符串末尾的'\0'