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()都可以用来统计字符串所占用的大小,二者的区别为:
- strlen必须以char *作为参数,且必须以‘\0‘结尾;而sizeof()可以用于其他类型;
- 对字符串进行sizeof操作的时候,会把字符串的结束符“\0”计算进去;
- strlen统计字符串中字符的长度,不包括结尾的‘\0‘;
- 数组做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
时间: 2024-10-12 23:16:51