您现在的位置是:首页 >其他 >strlen()和sizeof()区别网站首页其他

strlen()和sizeof()区别

又秃又弱 2023-05-16 16:00:02
简介strlen()和sizeof()区别

目录

区别

strlen()和sizeof()在计算时的大小

1.''的情况        

2.' '的情况

指针的特殊性

sizeof()在数组中的使用

总结


区别

  1. sizeof()是操作符,strlen()是库函数
  2. sizeof的参数可以是数据类型,也可以是变量;strlen()的参数只能是以''结尾的字符串
  3. 编译器在编译时就计算了sizeof的结果,而strlen()必须运行时才能计算出来
  4. sizeof是数据类型占内存的大小;strlen()是字符串实际的长度
  5. 数组作为sizeof的参数时,不退化,作为strlen的参数时要退化为指针

strlen()和sizeof()在计算时的大小

1.''的情况        

strlen()计算时,会到''的位置停下来不再计算,不会把''计算入内。但是如果''后面有数字时,这个时候''已经不是''而是一个八进制的数,strlen()遇到后不会当作''来处理。

        sizeof()遇到''不会停下,sizeof会把字符串结尾处的''读取到,计算在长度内。

结合例题理解

int main()
{
	char str[] = "abc12abcdef";
	char str1[] = "abcdefg";
	char str2[] = "abcabc";

	cout << sizeof(str) << endl;
	cout << strlen(str) << endl;
	cout << sizeof(str1) << endl;
	cout << strlen(str1) << endl;
	cout << sizeof(str2) << endl;
	cout << strlen(str2) << endl;
}

 解答:

  +数字 = 八进制  因此,/012=8+2=10

        注意,八进制输出就是1位,不是说八进制的10输出位数位数就是两位

2.' '的情况

  • strlen()不会读取' '
  • sizeof()会读取‘ ’

字符串以‘ ’结尾就不会再以‘’结尾了

strlen()为下图所示,sizeof()还需要加上结束符'',即为9 

        有个误区是,会以为以‘ ’结尾就就不再往后读取了,但是 并不会作为字符串的结束符,字符串结束符只能是 

 

指针的特殊性

sizeof(指针)大小是固定的,并不跟指针指向的内存空间相关

指针在X64 64位平台上,大小为8,X86 32位平台上大小为4

用指针对字符串输出时:

printf("%s",src);//%s可以直接输出字符串,遇到停止,不需要循环

补充:如果malloc开辟空间

需要malloc(srlen(src)+1);加1为’‘分配空间

sizeof()在数组中的使用

原文链接:sizeof()在数组中的使用 

总结

  • strlen()不会读取''
  • sizeof()会读取‘’
  •   +数字 = 八进制,占1位
  • strlen()会读取' '
  • sizeof()会读取‘ ’
  • sizeof(指针)
    • X86 32位 =4
    • X64 64位=8
  • 如果malloc开辟空间,需要malloc(srlen(src)+1);加1为’‘分配空间

  • 用指针对字符串输出时,printf("%s",src);//%s可以直接输出字符串,遇到停止,不需要循环

  • 一维数组arr[]:

    • sizeof(arr) ->数组总字节

    • sizeof(arr[0]) ->第一个元素字节数,或者说是单个元素的大小

  • 二维数组brr[][]

    • sizeof(brr) ->数组总字节数,即行和列元素总个数*定义类型的大小

    • sizeof(brr[0]) ->第一行元素的总字节数

    • sizeof(brr[0][0]) ->单元格类型所占字节数与一维数组arr[0]含义一致,单个元素的大小。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。