用sizeof和strlen来度量字符串所占字节数和字符串长度的测试
Printf(“%ld %ld\n”, sizeof(test), strlen(test));
Char *test1 = “nihao”; //85
Char test2[] = “nihao”; //65
Char test3[20] = “nihao”; //205
Char test4[20]; //200
Sizeof(test1) = 8; //此时8代表的是char指针变量类型的长度是8字节64位
Strlen(test1) = 5; //此时代表的是字符串的长度
Sizeof(test2) = 5; //此时字符数组的长度就是字符串的长度
Strlen(test2) = 6; //此时包含了‘\0’字符串结尾标志长度为6
Sizeof原理:sizeof表示的是当前变量所占的内存空间包括\0,但是当使用char str[] = {‘n’, ‘I’, ‘h’, ‘a’,‘o’};这样的字符数组的时候sizeof(str) == 5;
Strlen原理 strlen 表示的是当前字符串的长度,也就是不包括\0的长度,当逐位审查字符串的时候遇到字符串结尾标识\0的时候返回,不包括\0,其中空格,tab,换行符都不是\0;
sizeof(“nihao\n”)== sizeof(“nihao\t”) == sizeof(“nihao “) == 7;
实际上数组是一种数据类型,并不是简单的连续的空间,是有类型记录的,当数组作为形参传递给函数的时候,会退化为字符型指针,虽然可以用数组的方法使用malloc申请的连续堆空间,并且不会报错,但是数组和连续的空间是有区别的,特别当字符型指针作为形参代替数组作为形参,往往会报错。