sizeof(s)和strlen(s)的区别

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;
}

运行结果如下:

sizeof(s)和strlen(s)的区别

查看类型定义,如下可以看到,strlen(s)和sizeof(s)一样都是size_t类型,在WIN64系统中,size_t类型是利用typedef给unsigned int类型取的一个别名,本质上还是unsigned int类型,占4个字节

sizeof(s)和strlen(s)的区别

sizeof(s)和strlen(s)的区别

上一篇:在Apache服务器上安装SSL证书并配置http跳转https教程


下一篇:C 中 strong, weak, assign, copy 的区别