sizeof与strlen

  • sizeof()计算一个类型的空间大小
  • strlen只用于计算字符串长度,寻找‘\0‘的位置,但是不包括‘\0‘位置
  • 例一:

    int b=strlen("\0b");
    int a=sizeof("\0b");

    输出b=0;a=3;  a为计算的该字符串所占的空间大小;

  • 例二:

    char a[10];
    char *b=new char[10];
    int x=sizeof(a);   //x=10;
    int y=sizeof(b);   //y=4;
    int z=sizeof(*b); //z=1;

    x计算的是数组所占的空间大小;
    y计算的是字符指针b所占的空间大小,32位机中所有的指针变量所占的空间大小为4个字节;
    z计算的是指针b所指向的第一个字符所占的空间大小,char型空间为1个字节;

  • 例三:

    char a[10];
    char *b=new char[10];
    int x=strlen(a); //随机数
    int y=strlen(b);  //随机数strcpy(b,"hello");int z=strlen(b); //z=5;
  • sizeof在计算结构体变量的空间时,需要遵循两个规则:
    1)结构体每个成员的首地址是成员大小的整数倍,有需要会在成员之间填充字节;
    2)结构体的总空间大小为最宽基本成员类型的整数倍。在寻找最宽成员时,需要将复合类型“打散”来看,比如结构体内包含另一个结构体,则把另一个结构体拆开来看。

    struct S1{
      int a;
      char b;
    };//4+1+3=8
    struct s2{
      char c;
      S1 s;
      char d;
    };//1+3+4+1+1+2=12,12是int型空间的整数倍
时间: 2024-10-11 02:22:20

sizeof与strlen的相关文章

C++Sizeof与Strlen的区别与联系

一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当参数分别如下时,sizeof返回的值表示

C语言中的sizeof和strlen

1.sizeof是算符,strlen是函数: 2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的: 3.大部分编译程序,在编译的时候就把sizeof计算过了,这是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因: 4.strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,不是类型占内存的大小: 5.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧,这是因为sizeof是个操作符不是个函数. 示例代码:

C语言:内存地址分析 & sizeof和strlen用法总结

还是在大学时代接触的C语言,当时学习数组.指针等概念时,怎一个"晕"字了得.最近在学习之余,疯狂地恶补了相关知识,故总结之,如有错误,请大家多多指点. 一. 内存地址分析 1) 先来看一个最基础的例子: int a[4]; 提问:&a[0],  a,  &a,  a+1,  &(a+1),  &a+1 分别表示什么? 咋一看,真的不知所措: 我们可以图解来分析它(假设下面的操作均在32为系统上面). 先来对上图进行简单的说明工作: 1. 紫色区域就是数组

sizeof与strlen的区别

本文列举了sizeof与strlen的区别,总结一下: sizeof()的结果是一个对象占用的字节数,对于字符串包括字符串结尾的\0. strlen()的结果不包括\0. 下面是源码: #include <stdio.h> int main() { int i = 0; char acNum[] = "12345"; ; char ac3Num[3] = "12"; char *pcNum = "12345" //printf(&qu

sizeof、strlen、字符串、数组,整到一块,你还清楚吗?

写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正是帮助大家将相关知识总结清楚. 正文 先看一段代码 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void testchar(char str[]) 5 { 6 printf("%d %d\n", sizeof(str

sizeof和strlen的区别

char str[20]="0123456789"; int   a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记. int   b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响 char *str1="absde"; char str2[]="absde";char str3[8]={'a',};char

【转】Sizeof与Strlen的区别与联系

一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当参数分别如下时,sizeof返回的值表示

sizeof和strlen

Sizeof与Strlen的区别与联系 一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当

sizeof 和strlen

当计算字符串的大小时,sizeof和strlen的区别: sizeof 包括字符结束标识符,strlen不包括. #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int a[2] = {0,1}; char b[7] = "hellor"; int i = sizeof(a); int j = sizeof(a)/sizeof(a[0]); int m =

C语言-Sizeof与Strlen的区别与联系(转)

1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型.该类型保证能容纳实现所建立的最大对象的字节大小. 2.sizeof是算符,strlen是函数. 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的.sizeof还可以用函数做参数,比如: short f();printf("%d\n", sizeof(f()));输出的结果是sizeof(short),即2. 4.数组做sizeof的