在C/C++中,在32位编译系统中,一个指针占4个字节,所以sizeof(*)等于4.
对于一个数组,sizeof的是这个数组的所占的总空间.
sizeof在计算未分配数组是多大时,须记得除了初始化值外,还需加上一个'\0'.
strlen计算字符数组或指针中字符串长度,即从起始位置到'\0'的字符数,不包含'\0'.
实例:
char *str1 = "abcd";
char str2[] = "abcd";
char str3[5] = {'a'};
char str4[4] = {'a','b','c','d'};
sizeof(str1) = 4;
sizeof(str2) = 5;
sizeof(str3) = 5; strlen(str3) = 1;
sizeof(str4) = 4; strlen(str4) = ? (一个不确定的值,因不清楚程序会运行到哪里碰到‘\0’字符)
#include "stdio.h"
void myfun(char *s)
{
printf("sizeof(s) = %d,strlen(s) = %d \n",sizeof(s),strlen(s));
}
void main()
{
char *str1 = "abc";
char str2[] = "abcd";
char str3[6] = "abcde";
mafun(str1);
mafun(str2);
mafun(str3);
}
上述函数运行结果显示为:
sizeof(s) = 4,strlen(s) = 3
sizeof(s) = 4,strlen(s) = 4
sizeof(s) = 4,strlen(s) = 5
从上述结果可知,在调用的myfun函数里面,不管传入的是指针还是数组,其实内部全部是指针在调用,所以sizeof的结果全为4.
对于一个数组,sizeof的是这个数组的所占的总空间.
sizeof在计算未分配数组是多大时,须记得除了初始化值外,还需加上一个'\0'.
strlen计算字符数组或指针中字符串长度,即从起始位置到'\0'的字符数,不包含'\0'.
实例:
char *str1 = "abcd";
char str2[] = "abcd";
char str3[5] = {'a'};
char str4[4] = {'a','b','c','d'};
sizeof(str1) = 4;
sizeof(str2) = 5;
sizeof(str3) = 5; strlen(str3) = 1;
sizeof(str4) = 4; strlen(str4) = ? (一个不确定的值,因不清楚程序会运行到哪里碰到‘\0’字符)
#include "stdio.h"
void myfun(char *s)
{
printf("sizeof(s) = %d,strlen(s) = %d \n",sizeof(s),strlen(s));
}
void main()
{
char *str1 = "abc";
char str2[] = "abcd";
char str3[6] = "abcde";
mafun(str1);
mafun(str2);
mafun(str3);
}
上述函数运行结果显示为:
sizeof(s) = 4,strlen(s) = 3
sizeof(s) = 4,strlen(s) = 4
sizeof(s) = 4,strlen(s) = 5
从上述结果可知,在调用的myfun函数里面,不管传入的是指针还是数组,其实内部全部是指针在调用,所以sizeof的结果全为4.