#include <stdio.h>
#include <string.h>
int main()
{
char cdata[] = "hello";
char cdata2[128] = "hello";
printf("sizeof: %d\n", sizeof(cdata)); // 6
printf("sizeof: %d\n", sizeof(cdata2)); // 128
printf("strlen: %d\n", strlen(cdata)); // 5
return 0;
}
strlen 会计算有效字符,sizeof 会把结束标志也计算上,如果字符串数组的大小在声明的时候就确定了;则会得到你规定的那个值
另外一种情况,计算指针变量的时候
#include <stdio.h>
#include <string.h>
void test()
{
}
int main()
{
void (*ptest)();
ptest = test;
char *p = "hello";
// p是一个char *, sizeof来计算的时候,得出是计算机用多少个字节来表示一个地址
printf("sizeof:p %d\n", sizeof(p)); // 8
printf("sizeof:char* %d\n", sizeof(char *)); // 8
printf("sizeof:int * %d\n", sizeof(int *)); // 8
printf("sizeof:ptest %d\n", sizeof(ptest)); // 8
printf("strlen: %d\n", strlen(p)); // 5
return 0;
}
可以看出,strlen亦然是只计算有效字符的大小,而sizeof则会得到计算机用多少个字节来表示一个地址,不管你是 char *, 还是 int *; 这里的计算机都用8个字节表示一个地址。