#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[] = "hello";
char b[] = {'a','b'};
char c[] = {'c','d'};
char * p;
p =a;
cout << "sizeof(a) = " <<sizeof(a) <<endl;
cout << "strlen(a) = " <<strlen(a) <<endl;
cout << "sizeof(b) = " <<sizeof(b) <<endl;
cout << "strlen(b) = " <<strlen(b) <<endl;
cout << "sizeof(c) = " <<sizeof(c) <<endl;
cout << "strlen(c) = " <<strlen(c) <<endl;
cout << "sizeof(p) = " <<sizeof(p) <<endl;
cout << "strlen(p) = " <<strlen(p) <<endl;
}
strlen()是一个标准库函数,其参数只能是'\0'结束的字符串(如果不是'\0'结束的字符串呢?)。
现在来看上面的程序,先给出输出结果:
sizeof(a)和strlen(a)的结果很好理解。sizeof(b)和sizeof(c)的结果也可以理解,为什么strlen(b),strlen(c)的长度分别为7和9呢?。这是因为字符数组b和c的字符里面没有'\0'。程序编译的时候函数的局部变量放在内存的栈区,在栈里面上面程序里的字符存放的形式是cdabhello\0,因此才会输出7和9。对于sizeof(p),p是一个指针,不管是char型的还是void型的,数据都是4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。