C语言--字符串--sizeof与strlen的区别
目录
二.sizeof的用法
三.strlen的用法
四.sizeof与strlen的区别
五.总结
六.小试牛刀
一.前言
sizeof()是操作符,strlen()是函数,这俩本来没有关系,但用着用着就会混淆。
二.sizeof的用法
sizeof()是一种操作符,用来求取“变量”or“类型”的所占空间的大小(单位:字节)。值得注意的是sizeof不是函数,函数的后面是必须要加()的,而sizeof后面对变量所占内存空间计算时可以省略,由此看出,sizeof不是函数。补充一点:sizeof对类型进行计算时则不可省略。
sizeof可以用于以下情况:
1. 用于获取基本数据类型的大小:可以使用sizeof来获取基本数据类型(如int、char、float等)在当前平台上的字节大小。例如,sizeof(int)将返回int类型在当前平台上的字节大小。
2. 用于获取数组的大小:可以使用sizeof来获取整个数组的大小。例如,int arr[10];,那么sizeof(arr)将返回整个数组占用的字节大小。
3. 用于获取指针类型的大小:sizeof可以用于获取指针类型(如int*、char*等)在当前平台上的字节大小。例如,sizeof(int*)将返回一个指针类型的字节大小。
4. 用于动态分配内存时获取内存块的大小:在使用动态内存分配函数(如malloc、calloc等)分配内存时,可以使用sizeof来获取需要分配的内存块的大小。例如,malloc(sizeof(int) * 10)将分配一个具有10个int类型元素的内存块。
5.在计算数组中元素的个数时也非常有用,len=sizeof(arr)/sizeof(arr[0]);len 就是数组的长度
需要注意的是,sizeof是一个编译器运算符,它在编译时计算并返回结果。它不会对操作数进行实际的计算或者运行时的访问。
总结:sizeof运算符可以帮助我们在编写C程序时,获取各种数据类型的大小,在进行内存分配、数组处理等操作时非常有用。
三.strlen的用法
strlen是一个C语言的字符串处理函数,用于计算字符串的长度(不包括字符串结尾的空字符'\0')。需要应用头文件<string.h>。
注意:虽然字符串的末尾默认有一个'\0'字符,但是strlen在计算时是不包括'\0'的,即 所见即所得
比如: 下面的str的长度为11,不包括'\0'哦!
char str[20]="hello world";
四.sizeof与strlen的区别
sizeof是一个运算符,用于获取数据类型或变量所占用的内存字节数。常用于动态分配内存、计算数组元素个数等场景。例如,sizeof(int)返回4,sizeof(char[20]返回20。
strlen是一个函数,用于计算以指定字符为结尾的字符串的长度。在运行时遍历字符串数组,直到找到结束符'\0'为止。常用于字符串操作和处理。例如,strlen("hello")返回5。
注意;sizeof可以用于计算任何数据类型的大小,包括基本类型、数组、结构体、指针等。而strlen只能用于以'\0'结尾的字符串。
综上,sizeof和strlen虽然都用于获取数据大小,但是具体用法和计算方式是不同的。使用时需要根据具体的需求选择合适的函数或操作符。
五.总结
sizeof()是操作符,strlen()是函数,sizeof用于计算后面内容所占空间的大小,单位是字节。要包括字符'\0',strlen用于计算字符串的长度,不要包括'\0'。
六.小试牛刀
分别计算:str1,str2,str3,str4,str5,str6,str7的sizeof与strlen的计算结果,并打印。
int main()
{
char str1[100] = "abcde";
char str2[] = "abcde";
char str3[100] = "abcde\nxy\0z";
char str4[] = "abcde\nxy\0z";
const char *str5 = "abcde\nxy\0z";//指针,x86为4字节,x64为8字节
char str6[] = {0,0,0,0,0,0};
char str7[] = {'\0','\0','\0' ,'\0' ,'\0' };
printf("%d,%d\n", sizeof(str1), strlen(str1));//100,5
printf("%d,%d\n", sizeof(str2), strlen(str2));//6,5
printf("%d,%d\n", sizeof(str3), strlen(str3));//100,8
printf("%d,%d\n", sizeof(str4), strlen(str4));//11,8
printf("%d,%d\n", sizeof(str5), strlen(str5));//4,8
//printf("%s\n",str3);
return 0;
}
创作不易, 如果这份博客👍对你有帮助,可以给博主一个免费的点赞以示鼓励。
欢迎各位帅哥美女点赞👍评论⭐收藏⭐,谢谢!!!
如果有什么疑问或不同的见解,欢迎在评论区留言哦👀。
祝各位生活愉快⭐
码农小小苏: 感谢支持
码农小小苏: 不客气啦,感谢支持
艾普里莫: 关于列表的介绍,特别详细,看完以后受益非浅,必须收藏起来,以后用的时候拿出来看,谢谢博主分享
小王毕业啦: 这篇关于力扣刷题-674. 最长连续递增序列的文章写得非常棒!博主的独特见解和详细解释让我对这道题有了全新的理解,让我受益匪浅。文章内容简洁明了,逻辑清晰,让人一目了然。感谢博主的用心分享和辛苦付出!期待未来能看到更多博主的优质文章,也希望可以继续得到博主的指导,共同进步。再次感谢博主的付出和支持!
试看我良知: 很细致,很好,非常感谢