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