| |
| #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 是一样的。 |