strlen 和sizeof 区别,联系

strlen 和sizeof 区别,联系一.sizeof头文件:typedef类型:unsigned in使用方法:sizeof(类型说明符)或者sizeof表达式(表达式可以是数组、指针、类型、对象、函数等)作用:返回一个变量或者类型的大小(以字节为单位);在C语言中,sizeof()是一个判断数据类型或者表达式长度的运算符。sizeof语法有以下两种:sizeof(type_na…

大家好,欢迎来到IT知识分享网。strlen 和sizeof 区别,联系

一.sizeof

头文件: typedef

类型:  unsigned in

使用方法:sizeof (类型说明符)   或者 sizeof 表达式  (表达式可以是数组、指针、类型、对象、函数等)

作用:返回一个变量或者类型的大小(以字节为单位);在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。

sizeof语法有以下两种:

sizeof(type_name)  //类型

sizeod(object)         //对象名

    sizeof计算对象的大小也是转换成对 对象类型的计算,也就是说,同种类型的不同对象其sizeof值都是一致的。sizeof对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。

(以下仅是在32位编译器下进行)

eg:

sizeof(2)       // 结果为  4

sizeof(4)       // 结果为  4

sizeof(2.0)     //结果为  2

sizeof(4/2.0)   结果为   2  因为在计算时自动进行了类型提升

   由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系.

eg:

    int i = 0;
    i=10;
    char *ary=(char*)malloc(sizeof(char)*i);
    printf(“%d”, sizeof(ary));                           //运行结果为:  4

sizeof的计算发生在编译时刻,所以它可以被当作常量表达式使用.

  i=10;  char arr[sizeof(i)*10];

 

二.strlen

头文件:  string.h

定义:     size_t strlen(const char * str);

返回值:  str字符串的长度

作用:  返回字符串的长度。

字符串的长度由终止空字符’\0’确定:包括字符串开头和终止空字符之间的字符数(不包括终止空字符本身)。

 

strlen(str)求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的

    char str[100];
    printf(“%d”, strlen(str));

输出结果:随机值

搞懂以下的题就不容易出错了.

    char arr1[] = “abcd”;
    char arr2[] = { ‘a’, ‘b’, ‘c’, ‘d’ };
    char *arr3 = “abcd”;
    printf(“%d\n”, strlen(arr1));  //4
    printf(“%d\n”, strlen(arr2));  // 随机值
    printf(“%d\n”, strlen(arr3));  //4
    printf(“%d\n”, sizeof(arr1));  //5 包括’\0′
    printf(“%d\n”, sizeof(arr2));  //4
    printf(“%d\n”, sizeof(arr3));  //4 实际测的是指针大小

sizeof 与strlen的区别

⒈sizeof是取字节运算符,而strlen是函数。

⒉sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。

⒊sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以’\0’结尾的。sizeof还可以用函数做参数

eg:

short fun()
{

    ;
}

printf(“%d”, sizeof(fun()));   // 2 相当于测fun函数的返回值类型的大小即sizeof(short)

4.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。

5.如果给定字符串,要求传参它的长度,一定要使用strlen 

6数组做sizeof的参数不退化,传递给strlen就退化为指针了。

7.注意以下这个例子.

char str[20]=”0123456789″; 
int a=strlen(str);     //a=10;  strlen 计算字符串的长度,以结束符 ‘\0’为字符串结束。 
int b=sizeof(str);    //b=20;   sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/16136.html

(0)

相关推荐

发表回复

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

关注微信