最近写的一个小程序中用strlen函数求字符串长度,字符明明只有4个,可是结果求出来的长度却不是4,原来使用strlen函数要求字符串必须是以'' ''结尾的。strlen返回它的长度但不包括‘
这里就顺便总结一下了。
(以下均针对x86 32bit平台)
1.先看例子。
char* ss = "0123456789";
char st[] = "0123456789";
char sa[100] = "0123456789";
struct s{
int i;
char j;
double k;
}sb;
sizeof(ss)=?
sizeof(*ss)=?
sizeof(st) =?
sizeof(*st) =?
sizeof(sa) =?
strlen(sa) =?
sizeof(sb)=?
int func(char a[100]){
sizeof(a)=?
}
(评论处有答案)
2.sizeof可用于数据类型,使用形式:sizeof(type),数据类型必须用括号括住,如sizeof(int)。也可用于变量:sizeof(var_name)或sizeof var_name
变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。
注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。
3.sizeof的结果类型是size_t,它在头文件中typedef为unsigned int类型。
4.当操作数是指针时,sizeof依赖于编译器,一般的指针字节数是4.
5.如果操作数是字符数组类型,其结果是数组的总字节数,包含‘