c语言 strlen 与sizeof 的区别
- strlen
strlen 是用来计算字符串长度的函数,参数类型必须是char* ,strlen(char*) 函数求的是字符串的实际长度,在遇到第一个 ‘\0’ 就返回,如果你只定义而没有给字符串赋值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止。
- sizeof
sizeof 是计算符,在编译时计算,参数可以是数组、指针、类型、对象、函数,它的功能是:获得保证能容纳实现所建立的最大对象的字节大小
- 下面我们来看几个例子来加深对他们的理解
-
char *test = “0123456789”;
sizeof(test) 为 4,test 是指向字符串常量的指针,在内存中占4个字节,sizeof获得的是指针所占的空间
sizeof(*test) *test表示字符串数组的第一个字符,则为1 -
char test[] = “0123456789”;
sizeof(test)为11 ,计算到’\0’位置,因此是(10+1)
sizeof(*test)为1,*test是第一个字符 -
char test[100] = “0123456789”;
sizeof(test) 为100,test表示在内存中预分配的大小,100*1
strlen(test) 为 10,在遇到’\0’字符就结束循环 -
int test[100] = “0123456789”;
sizeof(test) 为400 ,int 在内存中占4个字节,故分配的内存为 1004
strlen(test) 报错,因为stelen 接受的参数只能为char ,且必须是以’\0’结尾,而此例子为int * -
char[] a={‘a’,‘b’,‘c’};
sizeof(a) 为 3,因为a 为字符数组,不是字符串数组,所以他不是以’\0’结尾,故长度为3
char[] b={“abc”};
b为字符串数组,以’\0’结尾,sizeof(b)的值应该是4。 -
若string str={‘a’,‘b’,‘c’,’\0’,‘X’};
那么sizeof(str)为5,strlen(str)为3