'x' 属于基本类型(char)字符-----------------由一个字符组成('x')
“x”属于派生类型(char数组)字符串-----------由2个字符组成('x'和空字符'\0')
strlen()和sizeof()
#include <stdio.h>
#include <string.h>
#define PRAISE "What a super marvelous name!"
int main(void)
{
char name[40] = "Morgan";
printf("strlen = %d\nsizeof = %d\n",strlen(name), sizeof(name));
printf("strlen = %d\nsizeof = %d",strlen(PRAISE), sizeof(PRAISE));
return 0;
}
输出结果
strlen = 6
sizeof = 40
strlen = 28
sizeof = 29
根据sizeof报告,name有40个字节,不过根据strlen报告只用了其中前6个单元来存放Morgan,第七个
字节为空字符,它的存在告诉strlen在哪里停止计数
对于 PRAISE ,strlen给出了准确数目(包括空格和标点符号)
sizeof运算结果比strlen的结果大1,这是因为它把结束字符串也算进去了(/0)你并没有定义存储该语句分配多大内存,计算机自己计算出双引号之间的字符数目。
PS:sizeof中是否使用圆括号取决于是获取一个类型还是一个具体量,类型必须用括号sizeof(char),具体量可以sizeof(6.28)或者 sizeof 6.28,一般建议都带括号