C语言编程中,会频繁地对数据进行操作。

其中为了防止内存的非法占用,判断数据的长度或者变量的大小是非常有必要的操作。

最常用的就是strlen()函数或者sizeof()运算符。

那么strlen()与sizeof()的区别是什么呢?什么时候使用strlen()什么时候使用sizeof()呢?


代码测试

1.当数组arr1给出确定的元素个数

#include <stdio.h>int main()
{char arr1[10] = { 's','u','r','e'};char* arr2 = "sure";printf("strlen_arr1=%d\n", strlen(arr1));printf("sizeof_arr1=%d\n", sizeof(arr1));printf("strlen_arr2=%d\n", strlen(arr2));printf("sizeof_arr2=%d\n", sizeof(arr2));return 0;
}
strlen_arr1=4
sizeof_arr1=10
strlen_arr2=4
sizeof_arr2=4

2.当数组arr1不给出确定的元素个数

#include <stdio.h>int main()
{char arr1[] = { 's','u','r','e'};printf("strlen_arr1=%d\n", strlen(arr1));printf("sizeof_arr1=%d\n", sizeof(arr1));return 0;
}
strlen_arr1=15
sizeof_arr1=4

3.当数组arr1不给出确定的元素个数,但最后一个元素是‘\0’

#include <stdio.h>int main()
{char arr1[] = { 's','u','r','e','\0'};printf("strlen_arr1=%d\n", strlen(arr1));printf("sizeof_arr1=%d\n", sizeof(arr1));return 0;
}
strlen_arr1=4
sizeof_arr1=5

结果分析

1.strlen()函数判断的是字符串的长度,字符串以'\0'结尾,函数只有找到'\0'才会断定字符串已经结束。第二段代码中,如果定义的字符数组不给出确定的元素个数,在初始化的元素之后的内存中存在数据,依然会被认定为字符串中的字符。所以字符串长度会出现随机值15。第三段代码中,虽然没有给出arr1的元素个数,但是初始化的最后一个元素是'\0',作为字符串结束的标志,函数认定字符串已经结束,但'\0'自身不加入字符串长度的判断,因此结果是4。

2.sizeof()求的是字符串在内存中的长度,所以它是加上最后的'\0'的,因此代码3中的结果是5。


结论总结

在C语言中,strlen和sizeof都用于求字符数组的长度,区别就是是否把最后的结束标志加上去。
strlen是不加的,他表示字符串的长度;
sizeof求的是字符串在内存中的长度,所以它是加上最后的'\0'的;
所以一般而言后者的长度会比前者多1。
strlen 是一个函数,它用来计算指定字符串 str 的长度,但不包括结束字符(即 null 字符);
关键字 sizeof 是一个单目运算符,而不是一个函数。与函数 strlen 不同,它的参数可以是数组、指针、类型、对象、函数等。

C语言中,strlen()函数与sizeof()运算符的区别以及用法区别相关推荐

  1. C语言中strlen函数功能及用法

    原型:extern int strlen(char *s); 用法:#include <string.h> 功能:计算字符串s的(unsigned int型)长度 说明:返回s的长度,不包 ...

  2. 实例分析C语言中strlen和sizeof的区别

    C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...

  3. c语言memcopy_C语言中memcpy 函数的用法详解

    C语言中memcpy 函数的用法详解 memcpy(内存拷贝函数) c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址 ...

  4. c语言中open函数r,C语言中open函数

    语法Open ( windowvar, windowtype {, parent } ) 参数windowvar:指定窗口变量名,Open()函数把打开窗口的引用放置到该变量中windowtype:s ...

  5. 如何求C语言字符串长度(strlen函数和sizeof关键字)

    如何求C语言字符串长度(strlen函数和sizeof关键字) 在程序里,一般会用***strlen()***函数或***sizeof()***来获取一个字符串的长度,但这2种方法获取的字符串的长度其 ...

  6. c语言中open的原理,C语言中open函数

    语法Open ( windowvar, windowtype {, parent } ) 参数windowvar:指定窗口变量名,Open()函数把打开窗口的引用放置到该变量中windowtype:s ...

  7. C语言中strlen()的用法

    这里写自定义目录标题 C语言中strlen()的用法 C语言中strlen()的用法 头文件:#include <string.h> strlen()函数用来计算字符串的长度,其原型为:u ...

  8. c语言中memcpy函数_带有示例的C中的memcpy()函数

    c语言中memcpy函数 memcpy()函数 (memcpy() function) memcpy() is a library function, which is declared in the ...

  9. C语言中scanf()函数中的是什么

    困惑初学者的C语言中scanf()函数中的&到底是什么 对于初学者而言,肯定有过这样一个困惑:为什么在使用scanf函数输入数据时有时需要在参数前加一个&,而有时却不用. 在回答&qu ...

最新文章

  1. 输入示例,自动生成代码:TensorFlow官方工具TF-Coder已开源
  2. @codeforces - 1106F@ Lunar New Year and a Recursive Sequence
  3. php 登陆 sql语句,PHP 连接MySQL数据库的SQL语句的简单示例
  4. [BZOJ2326] [HNOI2011] 数学作业 (矩阵乘法)
  5. oracle rank 语法_oracle rank函数怎么用
  6. android融云监听消息,关于android:融云-IMkit-拦截或监听所有发送消息
  7. 一个咸鱼的python_一个咸鱼的Python爬虫之路(三):爬取网页图片
  8. emoji隐藏表情_MacBook 7大隐藏功能曝光!强大到逆天!
  9. android node编码,android studio中的Node.js
  10. vue 查看变量类型_Vue学习 开始走向VUE开发2---插值使用详解
  11. 七月算法机器学习 9 推荐系统与应用
  12. java断言的例子_Java 8 谓词/断言的例子
  13. 微信小程序 git代码管理使用的详细步骤
  14. python各城市对应的省_python实现城市和省份字典(根据城市判断属于哪个省份)...
  15. Pytorch中iter(dataloader)的使用
  16. 用C语言编写PC与三菱PLC串口通讯,PC与三菱FX系列PLC通信的实现
  17. android 流失布局,GitHub - hongyangAndroid/FlowLayout: [不再维护]Android流式布局,支持单选、多选等,适合用于产品标签等。...
  18. Cesium geojson 区域拉伸高度
  19. 一个字节8位,无符号类型,最大值为什么是2的8次方-1,范围0-255
  20. Lua安装及常用命令使用

热门文章

  1. 简单明了的区分C++ C语言中声明(declaration)、定义(definition)、签名(signature)的区别
  2. QT开发调用FDTI ftd2xx.dll库
  3. 内推贴 || Marvell 2021校园招聘火热开启
  4. tomcat原理及调优
  5. 12套很酷的Google Plus图标下载
  6. Java,配置Java环境
  7. 计算机应用4班班委决定,计算机系1017班出游总结
  8. web前端利用jq实现选项卡切换功能
  9. 电脑上微信公众平台进不去
  10. IDEA--工欲善其事必先利其器