C语言:sizeof和strlen的区别
of:

首先我要在此声明sizeof不是函数!不是函数!不是函数!而是一个操作符!(看到operator了吗?)
1 2 3 4 5 6 7 8 9 10
| #include<stdio.h>
int main() { int a = 1; printf("%zd\n", sizeof(a)); printf("%zd\n", sizeof a ); printf("%zd\n", sizeof 1); return 0; }
|
这里要强调的是如果sizeof操作对象是一个表达式,则被操作的表达式里的计算不会被执行。
1 2 3 4 5 6 7 8
| int main() { int a = 3; int b = 5; printf("%zd\n", sizeof(a += b)); printf("%d\n",a); return 0; }
|
strlen:
!
strlen是C语言中的库函数<string.h>。原型是
1
| size_t strlen(const char* str)
|
看的出来strlen是专门求字符串长度的,统计的是从此地址开始往后\0之前字符串的字符个数,那么它就有可能越界查找。如下所示:
1 2 3 4 5 6 7 8 9 10
| int main() { char a[] = "abc"; char b[] = { 'a','b','c' }; printf("%zd\n", strlen(a)); printf("%zd\n", strlen(b)); printf("%zd\n", sizeof(a)); printf("%zd\n", sizeof(b)); return 0; }
|
总结区别:
