2015.09.06 C++的sizeof和strlen()

void Func(char str_arg[100])
{
    printf("%d\n", sizeof(str_arg));
}
int main(void)
{
    char str[] = "Hello";
    printf("%d\n", sizeof(str));
    printf("%d\n", strlen(str));
    char *p = str;
    printf("%d\n", sizeof(p));
    Func(str);
}
//输出:6 5 4 4
 
sizeof和strlen()都可以用来统计字符串所占用的大小,二者的区别为:
  1. strlen必须以char *作为参数,且必须以'\0'结尾;而sizeof()可以用于其他类型;
  2. 对字符串进行sizeof操作的时候,会把字符串的结束符“\0”计算进去;
  3. strlen统计字符串中字符的长度,不包括结尾的'\0';
  4. 数组做sizeof的参数不退化,作为函数参数传递的时候,退化为指针。
sizeof(str):占用的字节为5 + 1 = 6,其中1为末尾的'\0';
strlen(str):5
sizeof(p):计算的是指针的长度,32位机器上为4B
Func(str):传递的是指针,大小为4
 
void Func(char str_arg[2])
{
 int m = sizeof(str_arg); //指针的大小为4
 int n = strlen(str_arg); //对数组求长度,str_arg 后面的那个2没有任何意义
 printf("%d\n",m);
 printf("%d\n",n);
}
int main(void)
{
 char str[]="Hello";
 Func(str);
}
//输出:4 5

 

posted @ 2015-09-06 17:50  王爪爪  阅读(194)  评论(0编辑  收藏  举报