单片机/C/C++八股:(十八)C/C++ 中 sizeof 和 strlen 的区别
上一篇下一篇C 中指针和引用的区别C/C 中 sizeof 和 strlen 的区别本质不同sizeof是一个编译时运算符用于获取变量或类型所占的字节数包括\0。strlen是一个函数定义在string.h或cstring中用于计算字符串的实际长度不包括结尾的空字符\0。具体对比对比项sizeofstrlen类型编译时运算符函数参数要求任何变量或类型指向以\0结尾的连续字符序列的指针char 数组或 char 指针返回值变量在内存中占用的总字节数包含/0返回字符串中有效字符的个数不包含/0返回值类型size_tsize_t计算时机在编译时确定除了 C99 的变长数组在运行时计算注意使用strlen时需要包含string.h或cstring头文件。关于strlen的输入参数虽然一般都说是字符串但本质上是指向以\0结尾的连续字符序列的指针。strlen函数的运作方式是从这个指针开始往后逐个读取字符直到遇到第一个\0为止返回中间经过的非空字符个数。字符串字面量在内存中的存储方式是字符数组作为参数传入时其实传入的是字符数组的首地址。strlen不能用于未以\0结尾的字符数组否则会越界读取导致崩溃或错误结果。sizeof作用于数组时能返回整个数组大小但一旦数组作为参数传入函数就会退化为指针此时sizeof只返回指针大小。示例#includestdio.h#includestring.hintmain(){charstr[]Hello;// 实际存储为 {H,e,l,l,o,\0}char*pHello;printf(strlen(str) %zu\n,strlen(str));// 输出5printf(sizeof(str) %zu\n,sizeof(str));// 输出65个字符 1个\0printf(strlen(p) %zu\n,strlen(p));// 输出5printf(sizeof(p) %zu\n,sizeof(p));// 输出8在64位系统上指针大小为8字节return0;}运行结果5 6 5 8
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2433897.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!