|   | 
|  #include <string.h> | 
|  #include <stdlib.h> | 
|   | 
|  void fun(char str[100]) | 
|  { | 
     printf("%d\ 
", sizeof(str)); | 
|  } | 
|   | 
|  int main() | 
|  { | 
|      char str[] = "Hello"; | 
|      char *p1 = str; | 
|      int n = 10; | 
|      char *p2 = (char *)malloc(100); | 
|   | 
     printf("%d\ 
", sizeof(str)); /*求数组长度,包括'\\0'*/ | 
     printf("%d\ 
", strlen(str)); /*求字符串长度,不包括'\\0'*/ | 
|   | 
     printf("%d\ 
", sizeof(p1));  /*求char型指针长度*/ | 
     printf("%d\ 
", strlen(p1));  /*求字符串长度,不包括'\\0'*/ | 
|   | 
     printf("%d\ 
", sizeof(n));   /*求 n 这个整型变量的长度*/ | 
     printf("%d\ 
", sizeof(p2));  /*求 p2 指针类型长度*/ | 
|   | 
|      fun(p2);  | 
|   | 
|   | 
|   | 
|   | 
|      return 0; | 
|  } | 
| 运行及输出: | 
beyes@linux-beyes:~/C> ./sizeof_and_strlen.exe   | 
| 6 | 
| 5 | 
| 4 | 
| 5 | 
| 4 | 
| 4 | 
| 4 | 
| 说明: | 
| 此种题在招聘 C 语言软件开发工程师时很常见。主要测试对 sizeof() 和 strlen() 的理解。 | 
| 第一个输出为 6,测的是 str 这个数组的长度,包括末尾的 '\\0'. | 
| 第二个输出为 5,测的是字符串自身,不包括结尾的 '\\0'. | 
| 第三个输出为 4,由于 p1 是一个指针,sizeof() 求的是变量类型的长度。一个指针变量存放的是一个地址,而 32 位机器的一个地址都是 32 位即 4 个字节。 | 
| 第四个输出为 5,测的是 p1 指向的字符串的长度,和第二个一样。 | 
| 第五个输出为 4,一个整型变量的存储长度一般一般是 4 个字节,早期的机器使用 2 个字节来保存 int 型变量。 | 
| 第六个输出为 4, 这里同样求的是指针变量 p2 的长度,和第三个输出一样。 | 
| 第七个输出为 4,这里调用了 fun 函数。因为数组作为函数的参数时,对系统来说,char str[100] 和 char *str 是一样的。 |