strlen(s)即字符串长度(不包括结束标志'\0'):返回字符串中的所有字符的个数(1个汉字按2个字符算),其中,每个成对的符号如''、"" 算作2个);
字母以及英文符号(除标点符号及其他的特殊符号(如$)外还包括空白符)都只占一个字节,汉字以及中文符号都占两个字节
sizeof(s)即字符串所占空间(包括结尾的'\0')
代码如下:
#include <stdio.h>
#include <string.h>
int main() {
char* name1 = "张三";
char name2[] = "zhangsan";
printf("%zd\n", sizeof("张三"));//5,sizeof()返回值是size_t类型
printf("%zd\n", sizeof(name1));//4,name1是一个指针类型的变量,所有指针类型都占4个字节,所以不论字符串中内容为何,sizeof(name1)始终为4
printf("%zd\n", strlen("张三"));//4
printf("%zd\n", strlen(name1));//4,strlen()始终是计算字符串的长度,而不会去计算name1
printf("%zd\n", sizeof("zhangsan"));//9
printf("%zd\n", sizeof(name2));//9
printf("%zd\n", strlen("zhangsan"));//8
printf("%zd\n", strlen(name2));//8
return 0;
}
运行结果如下:
查看类型定义,如下可以看到,strlen(s)和sizeof(s)一样都是size_t类型,在WIN64系统中,size_t类型是利用typedef给unsigned int类型取的一个别名,本质上还是unsigned int类型,占4个字节