C语言中关于sizeof 和 strlen的区别分析

 更新时间:2015年02月28日 09:53:52   投稿:hebedich  
本文通过示例简单分析了4种情况下C语言中sizeof 和 strlen的区别,算是个人经验的一个小小的总结,如有遗漏还请大家告知。

1、编译时计算运算符sizeof,可用类型或变量做参数,计算占用内存的大小。sizeof后若是类型必须加括弧,若是变量名可不加括弧。sizeof(x)可用来定义数组维数如:

复制代码 代码如下:

printf("%d\n", sizeof(short));

    输出的结果为短整型的长度2。用结构类型或变量做参数时,sizeof 返回实际的大小,当用于静态数组时,sizeof 返回全部数组的尺寸。sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸

2、运行时计算strlen,只能用char*做参数,且必须是以''\0''结尾的。计算的是字符串的长度。如:

复制代码 代码如下:

char str[20]="0123456789";
int a=strlen(str); // 结果为a=10
int b=sizeof(str); // 结果b=20;

3、处理静态数组:

复制代码 代码如下:

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

4、处理指针:

复制代码 代码如下:

char* ss = "0123456789";
sizeof(ss) // 结果4,

ss是指向字符串常量的字符指针,sizeof 获得的是一个指针所占的空间。sizeof(*ss) 结果1,*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占用1字节。strlen(ss)= 10,若要获得这个字符串的长度,则一定要使用 strlen

以上所述就是关于sizeof 和 strlen区别的全部内容了,希望大家能够喜欢

相关文章

  • Matlab实现将图像序列合并为视频的方法详解

    Matlab实现将图像序列合并为视频的方法详解

    MATLAB是一种高性能语言,用于操纵矩阵、执行技术计算、绘图等。它代表矩阵实验室。借助这个软件,我们可以从图像中创建视频。这篇文章主要介绍了Matlab实现将图像序列合并为视频的四个方法,希望对大家有所帮助
    2023-03-03
  • 基于VC实现的网络监听功能程序实例

    基于VC实现的网络监听功能程序实例

    这篇文章主要介绍了基于VC实现的网络监听功能程序,需要的朋友可以参考下
    2014-07-07
  • C++实现图片转base64的示例代码

    C++实现图片转base64的示例代码

    Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法,本文主要为大家详细介绍了如何使用C++实现图片转base64,需要的可以参考下
    2024-04-04
  • 利用Matlab实现迭代适应点算法

    利用Matlab实现迭代适应点算法

    道格拉斯-普克算法(Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法、迭代适应点算法、分裂与合并算法)是将曲线近似表示为一系列点,并减少点的数量的一种算法。本文将利用Matlab实现这一算法,需要的可以参考一下
    2022-04-04
  • C语言中printf的两种输出对齐方式

    C语言中printf的两种输出对齐方式

    C语言中左对齐是C语言的默认输出方式,右对齐是一种特殊的输出方式,左对齐和右对齐都对应着一个已知的输出宽度,输出的字符串根据字符串的长度在宽度上进行补充,补充字符是空格,在使用printf函数输出时,需要在格式字符串中使用%-*s和%*s的格式来分别表示
    2024-02-02
  • C语言实现Linux下的socket文件传输实例

    C语言实现Linux下的socket文件传输实例

    这篇文章主要介绍了C语言实现Linux下的socket文件传输的方法,较为详细的分析了C语言文件Socket文件传输客户端与服务器端相关实现技巧,需要的朋友可以参考下
    2015-06-06
  • NSString与C字符串之间的相互转换

    NSString与C字符串之间的相互转换

    本文将详细介绍NSString与C字符串之间的相互转换,需要的朋友可以参考下
    2012-11-11
  • C++连接mysql数据库(改进版)

    C++连接mysql数据库(改进版)

    C++是大家都非常熟悉的,也是大家平时办公中经常会用到的,下面这篇文章主要给大家介绍了关于C++连接mysql数据库的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • C/C++ Qt 数据库QSql增删改查组件应用教程

    C/C++ Qt 数据库QSql增删改查组件应用教程

    Qt SQL模块是Qt中用来操作数据库的类,该类封装了各种SQL数据库接口,可以很方便的链接并使用。本文主要介绍了Qt数据库QSql增删改查组件的应用教程,感兴趣的同学可以学习一下
    2021-12-12
  • C++设计与实现ORM系统实例详解

    C++设计与实现ORM系统实例详解

    这篇文章主要为大家介绍了C++设计与实现ORM系统实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论