sizeof和strlen

sizeof 和 strlen返回的都是字节数,一个重要的区别在于,

strlen返回的是字符串的长度(不包含’\0’),其参数只能是char*

sizeof 返回的是对象或类型,所占的内存字节数,所以sizeof需要考虑’\0’。sizeof的参数可以是数组、字符串、对象等等。

#include <iostream>
#include <string.h>

using namespace std;

int main() {


/* 第一组 */
char* s1 = "0123456789";

// s1是字符指针,指向字符串常量的指针,32位机上的结果是4,64位是8
cout << sizeof(s1) << endl;

// *s1是第一个字符,结果为1
cout << sizeof(*s1) << endl; // 1

// strlen 返回字符串的长度(不包含结尾的'\0')
cout << strlen(s1) << endl; // 10

// cout << strlen(*s1) << endl; // 编译报错,strlen的参数只能是char* 不能是char



/* 第二组 */
char s2[] = "0123456789";

// s2是数组,结尾默认补'\0',所以是10+1
cout << sizeof(s2) << endl; // 11

// *s2 是第一个字符,结果为1
cout << sizeof(*s2) << endl; // 1

// s2是数组,返回数组的长度10
cout << strlen(s2) << endl; // 10




// 第三组
char s3[100] = "0123456789";

// s3表示在内存中预分配的大小,所以是100 * 1
cout << sizeof(s3) << endl; // 100

// 返回数组的长度10
cout << strlen(s3) << endl; // 10



// 第四组
int s4[100] = {0,1,2,3,4,5,6,7,8,9,};

// s4在内存中分配的大小是 100 * 4
cout << sizeof(s4) << endl; // 400

// cout << strlen(s4) << endl; // 编译报错,strlen的参数只能是char* 不能是int

return 0;
}