关于 strlen 与 sizeof 的区别

关于 strlen 与 sizeof 的区别关于 strlen 与 sizeof 的区别 我相信很多人都有所了解 以下我总结了几点关于 strlen 与 sizeof 的区别和注意事项 1 strlen 是函数 sizeof 是运算符 2 strlen 测量的是字符的实际长度 以 0 结束 而 sizeof 测量的是字符的分配大小 比如 charstr 20 hello printf strlen

关于 strlen 与 sizeof 的区别,我相信很多人都有所了解。以下我总结了几点关于strlen 与 sizeof 的区别和注意事项。

1. strlen 是函数,sizeof 是运算符。

2. strlen 测量的是字符的实际长度,以’\0′ 结束。而sizeof 测量的是字符的分配大小。

比如:

char str[20] = "hello"; printf("strlen: %d\n", strlen(str)); printf("sizeof: %d\n", sizeof(str));

结果显示为:

[root@localhost 0703]# ./hello strlen: 5 sizeof: 20

3.但是在子函数中,ziseof 会把从主函数中传进来的字符数组当作是指针来处理。指针的大小又是由机器来决定,而不是人为的来决定的。

#include 
  
    void size_of(char str[]) { printf("sizeof:%d\n", sizeof(str)); } int main() { char str[20] = "hello"; size_of(str); return 0; } 
  

结果显示为sizeof:4

4.我们知道字符数组的初始化一次性赋值,也可以逐个赋值。可以指定数组的大小,也可以不指定数组长度。

#include 
  
    #include 
   
     int main() { char str1[] = "hello"; char str2[] = {'h', 'e', 'l', 'l', 'o', '\0'}; char str3[] = {'h', 'e', 'l', 'l', 'o'}; printf("str1:%s\n",str1); printf("str2:%s\n",str2); printf("str3:%s\n",str3); printf("str1:%d\n", strlen(str1)); printf("str2:%d\n", strlen(str2)); printf("str3:%d\n", strlen(str3)); return 0; } 
    
  

结果显示为:

str1:hello str2:hello str3:hellohello str1:5 str2:5 str3:10

这是为什么呢?

我们知道字符串是以 ‘\0’ 为结束标志的,所以char str1[ ] = “hello” 等效于char str2[ ] = {‘h’ , ‘e’ , ‘l’ , ‘l’ , ‘o’ , ‘\0’} 。strlen函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到’\0’停止。而如果不在字符数组初始化的时候加上\0,那么strlen 得到的值就不是正确的数值,打印出来的结果也不是想要的结果。因此我们要避免这种情况,在初始化的时候要记得加上 \0,或者一次性赋初值。

5.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。而大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度。

6.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218781.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:30
下一篇 2026年3月17日 下午11:30


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号