sizeof和strlen
原创
©著作权归作者所有:来自51CTO博客作者mb6304a73bed12a的原创作品,请联系作者获取转载授权,否则将追究法律责任
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;
}