1 从他们各自的属性而言, sizeof是运算符,而strlen是一个函数
2 从功能上讲. sizeof 它是从内存角度出发,它用来求所占字节数,也就是说是求占内存大小,在c 语言中,是将字符串作为字符数组来处理的, c系统在存储字符串时,会自动在后面加一个 \0 作为一个字符串结束标志,因此在用sizeof 求字符串所占字节大小时包括 \0 的大小。
而strlen是一个关于处理字符串的函数,它的功能是用来求一个字符串的长度.。strlen说白了就是一个计数器,它从内存的某个位置开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。
3 sizeof 和strlen 的 使用形式
sizeof使用形式 : sizeof(变量) sizeof(变量类型) 例如:
int a = 20;
sizeof(a);// 结果为4
sizeof(double);// 结果为8
strlen使用形式: strlen(字符数组) 注意:字符数组作为参数传给strlen时会退化成指针
char c[] = "i am jackma"; // 定义一个字符数组c
int ret2 = strlen(c);// 求字符串的长度,不包括 \0
printf("%d\n", ret2);// 打印结果为 11
4 sizeof 和strlen的作用时间
sizeof 是运算符 在编译期求值产生作用, 而strlen是函数在运行期间产生作用
以下代码为例
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
char c[] = "i am jackma";// 定义一个字符数组c 注意: 空格也占一个字节的长度
int ret1 = sizeof(c);// 求字符串在内存中所占字节数,包括 \0
int ret2 = strlen(c);// 求字符串的长度,不包括 \0
printf("%d\n", ret1);// 打印结果为 12
printf("%d\n", ret2);// 打印结果为 11
int a = 20; // 定义一个变量并将其初始化
int *pa = &a; // 定义一个指针类型变量 让其存放变量a的地址
printf("%d\n", sizeof(a));// 求该变量所占字节数结果为4
printf("%d\n", sizeof(pa));// 求该指针变量( int* 型指针 )所占字节数 32位平台下为4 个字节 64 平台下占8个字节
system("pause");
return 0;
}