#include<stdio.h>
#include<string.h>
int main(void){
printf("hello world!\n");
char str[5] = {'a','b','c','d','e'};
char *p = str;
int plen = sizeof(p);
int strlen = sizeof(str); //注意 这里不能用strlen,不然会造成符号冲突,及库函数里面打strlen用不了。我就继续用错误的代码了
printf("plen = %d\n", plen);
printf("strlen = %d\n", strlen);
int length_p = strlen(p);
int length_str = strlen(str);
printf("length_p = %d\n", length_p);
printf("length_str = %d\n", length_str);
return 0;
}
在我的ubuntu系统上打印如下:
hello world!
plen = 8 //地址是64位的
strlen = 5
length_p = 6
length_str = 6
在window下面用devc++编译运行:
hello world!
plen = 4 //sizeof指针就是地址长度的大小
strlen = 5
length_p = 8
length_str = 8//这里的不对 是因为数组没有字符串截至符。
总结:sizeof是关键字查找,编译器去动态检查,长度包含/0
strlen是函数,计算机动态的从开始位置查找直到/0处,但是不包含/0