sizeof 与 strlen 的区别与使用详解。这算是 C++ 中基础中的基础了,很容易被考到。
strlen
是一个函数,只能以 char*
(字符串)作为参数,用来计算指定字符串 str
的长度,但不包括结束字符 '\0'
。所以其参数必须是以 '\0'
作为结束符才可以正确统计其字符长度,否则是个随机数,具体看下面的代码。sizeof
是一个单目运算符,它的参数可以是数组、指针、字符串、对象等等,计算的是参数所对应内存空间的实际字节数。str
的长度时,包含结束字符 '\0'
具体看下面的代码进一步理解:
#include
using namespace std;
int main() {char* s1 = "0123456789";cout<
另外sizeof
在统计结构体的大小时还有一个内存对齐的问题,具体如下:
struct Stu {int i;int j;char k;
};Stu stu;
cout<
这个例子是结构体的内存对齐所导致的,计算结构变量的大小就必须讨论数据对齐问题。为了CPU存取的速度最快(这同CPU取数操作有关,详细的介绍可以参考一些计算机原理方面的书),C语言在处理数据时经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data alignment)。这样做可能会浪费一些内存,但理论上速度快了。当然这样的设置会在读写一些别的应用程序生成的数据文件或交换数据时带来不便。
sizeof和strlen的区别及使用详解