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. 网络工程师_想要记录下来的一些题_2
  2. 只能是数字、字母、-和_
  3. 调用视频流html代码,如何将/“流”视频文件发送到HTML5视频标签
  4. 比较两个title是否相等(差点把我送走)
  5. 什么是word2vector
  6. html5怎么设置li向下移,请问如何实现鼠标移到li上改变另一个div的样式
  7. 必看谈谈数据库的锁机制!!
  8. iOS多线程:『GCD』详尽总结
  9. 运维人员须熟悉的38个运维工具汇总
  10. 网站搜索引擎优化外链工具
  11. 近600个教学学习资料链接(zz)
  12. 为什么要避免使用malloc()和free()函数?
  13. 华为应用市场2021年度安全隐私报告发布:护航应用安全是场“持久战”
  14. 独家食用指南系列|Android端SQLCipher的攻与防新编
  15. 准备离职第1天:java集合复习整理
  16. 国产光纤熔接机技术是否成熟?带你评测TFN-S7光纤熔接机性能
  17. H5 嵌入条码和二维码生成
  18. SpringAMQP-Basic Queue、Work Queue、Fanout、Direct、Topic
  19. 分享应用于桌面闹钟的超低成本MG127蓝牙射频前端芯片
  20. Advanced Super-Resolution using Lossless Pooling Convolutional Networks

热门文章

  1. 通信原理包络是什么意思_2021年通信原理考研题库
  2. Android按键Input KeyEvent
  3. ellipse()用法
  4. swipei实现3D横向焦点图效果
  5. 《找对英语学习方法的第一本书》
  6. Ubuntu rEFInd 引导双系统界面美化
  7. Neutron 理解 (6): 如何实现虚拟三层网络
  8. srm软件非生产采购的解决方案
  9. 【arduino从入门到放肆】⑥Arduino 小台灯
  10. 15.8数据库(8):MySQL表关系管理