赞
踩
在C语言中,sizeof
和 strlen
函数在处理字符串时有明显不同的作用和结果。
sizeof
是一个编译时操作符,用于获取对象或类型在内存中占用的字节数。sizeof
应用于字符串(实际上是字符数组)时,它返回的是整个数组所占用的字节数,包括字符串的结尾空字符 '\0'
。但是,这个大小是在编译时就确定的,与字符串在运行时实际包含的字符数无关。- #include<stdio.h>
- #include<string.h>
-
- int main()
- {
- char cdata[] = "hello";
- char *pdata = "hello";
- char cdata2[128] = "hello";
-
- printf("sizeof cdata: %d\n",sizeof(cdata));
- printf("sizeof pdata: %d\n",sizeof(pdata));
- printf("sizeof cdata2: %d\n",sizeof(cdata2));
- return 0;
- }
输出:
- sizeof cdata: 6
- sizeof pdata: 8
- sizeof cdata2: 128
由此可见sizeof计算字符串长度时是包括,字符串结尾默认的 '\0 ' 的。同时在使用字符数组定义时,如果声明时给定了数组大小,而有效字符数不足时会默认补 '\0 ' 并计入字符串长度的。在使用指针定义时,由于pdata本身就是一个指针,而且C语言中用8个字节保存一个地址,所以其输出为8。
strlen
是一个函数,定义在 <string.h>
头文件中,用于计算以 '\0'
结尾的字符串的长度(不包括结尾的空字符 '\0'
)。strlen
在运行时遍历字符串,直到遇到第一个 '\0'
字符,然后返回它之前字符的数量。这意味着 strlen
的返回值依赖于字符串在内存中的实际内容。- #include<stdio.h>
- #include<string.h>
-
- int main()
- {
- char cdata[] = "hello";
- char *pdata = "hello";
- char cdata2[128] = "hello";
-
- printf("strlen cdata: %d\n",strlen(cdata));
- printf("strlen pdata: %d\n",strlen(pdata));
- printf("strlen cdata2: %d\n",strlen(cdata2));
- return 0;
- }
输出:
- strlen cdata: 5
- strlen pdata: 5
- strlen cdata2: 5
从输出可以看出,在定义字符串数组时,无论是否声明数组长度,strlen函数都只会计算有效字符的长度,而且不包含 ' \0 '。
在处理字符串时,正确选择 sizeof
和 strlen
非常重要,因为它们的返回值和用途截然不同。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。