主要区别如下:
1、sizeof是运算符不是函数,strlen是C语言标准库函数。
2、 strlen 测量的是字符串的实际长度,以’\0’ 结束,返回结果不包括’\0’ 。
3、sizeof不能计算动态分配空间的大小。
#include <test.h>
#include <stdio.h>
#include <string.h>
int test()
{
char strl[]="1234";
char *str2 = "1234";
char str3[10];
//\r就是回车,并且回到行首,\n就是换行
//strlen函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。
printf("str1: %d %d\r\n",sizeof(strl),strlen(strl));// sizeof(str1); // 5,计算的是指针内存的大小
// strlen(str1); // 4 ,计算的是字符串长度,不包括‘\0’
printf("str1: %d %d\r\n",sizeof(str2),strlen(str2)); //sizeof(str2); // 4,计算的是指针内存的大小
//strlen(str2); // 4 ,计算的是字符串长度,不包括‘\0’
printf("str1: %d %d\r\n",sizeof(str3),strlen(str3));//sizeof(str3); // 10 ,计算的是char型数组的内存大小
//strlen(str3); //"值不确定",因为字符串需要找到’\0’才可结束,要在’a’之后找到’\0’,所以是个随机值
return 0;
}
`输出:
str1: 5 4 //str1: 5 4 //字符串是以 '\0' 为结束标志的;str1[] = "1234";等价于str1[5]={‘1’,’2’,’3’,’4’,’\0’}
str1: 4 4 //str2: 4 4 //keil中(32位环境)指针大小是4字节,VScode中(64位环境)指针大小是8字节
str1: 10 0 //str3: 10 0