c/c++中关于sizeof、strlen的使用说明

sizeof: 一般指类型、变量等占用的内存大小(由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小)

strlen: c字符串的长度(参数必须是字符型指针 char*,当数组名作为参数传入时,实际上数组就退化成指针了。该函数的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL(或0x00),返回的长度大小不包括NULL)

 

1、sizeof的使用

sizeof(int);  // 返回int类型在内存中占用的字节数4(x86)或8(x64)

int a = 2;

sizeof(a);  // 返回int 变量在内存中占用的字节数4(x86)或8(x64)

const char *b = "abcd";

sizeof(b);  // 返回char类型指针在内存中占用的字节数4(x86)或8(x64),指针占用的字节数大小和类型无关

char *parr = new char[10];

sizeof(parr);  // 返回char类型指针在内存中占用的字节数4(x86)或8(x64),指针占用的字节数大小和类型无关

int func() {return 2;}

sizeof(func()); // 返回int类型在内存中占用的字节数4(x86)或8(x64)(即函数的返回值类型,不能为void)

 

2、strlen的使用

c字符串是否结束是以''标志来判断的

const char *a = "abcd";

strlen(a);  // 字符串长度为4

sizeof(a);  // 在内存中占用的字节数4(x86)或8(x64)

char b[10] = "abc";

strlen(b);  //字符串长度为 3

sizeof(b);  // 在内存中占用的字节数10(x86)或20(x64)

const char *c ="abc";

strlen(c);  // 字符串长度为1

sizeof(c);  // 在内存中占用的字节数5(x86)或10(x64)

char a[] = {};

在数组 a 中,a[i] = '' 与 a[i] = 0 效果一样。因为''是预定义的符号常量,其值为0。''常用于字符串结束标记,而0就是普通的即时常量,所以代码中给字符数组最后一位添加结束标记时写''而不写0具有提示意义,便于阅读。

#incluce <iostream>
using namespace std;

int main()
{
    char a[280];
    for(i = 0; i < 280; i++)  
    {  
        a[i] = i + 1; // a[255] = 0
    } 
    cout << strlen(a) << endl; // 255, char占8bit,当你存256的时候,写成二进制是1 0000 0000,因为char只有8个bit,所以1没有存进去,只存进了8个0,这时候strlen判断到这里就认为字符串结束了
}

 

备注:在c++中string字符串的长度可以使用其成员函数length()和size()

std::string str = "hello world"

str.size(); // str.length();

在孤独中思考,在思考中成熟,在成熟中升华
原文地址:https://www.cnblogs.com/laogaoyang/p/6076514.html