strlen和sizeof
以前从某种意义上混淆了两种东西,但对它们的功能不是很了解。
如果你看看谷歌,就会发现自己经常误解。
strlen和sizeof的区别
1.sizeof操作符的结果类型为size_t,头文件中的typedef为unsigned int类型。
此类型保证可以容纳实现已建立的最大对象的字节大小。
2.sizeof是运算符,strlen是函数。
3.sizeof可以在类型中创建参数,strlen只能在char*中创建参数,并且必须以“' '”结尾。
4 .数组创建sizeof的参数不退化,传递给strlen时退化为指针。
5 .大多数编译器在编译时计算了sizeof是类型还是变量的长度。 这就是sizeof(x )可以定义数组维的理由
char str[20]='0123456789 '; //str是编译时大小固定的数组
inta=strlen(str; //a=10; //strlen ()在执行中确定
intb=sizeof(str ); //且b=20; //sizeof ) )在编译期确定
6.strlen的结果在运行时计算,用于计算字符串的实际长度,类型并不占用内存大小。
7 .如果是类型,必须在7.sizeof之后加上括号,但如果是变量名,也可以不加括号。 这是因为sizeof是操作符,不是函数。
char c;
sizeof c; //变量名可以不加括号
如果sizeof应用于某个结构类型或变量,则返回实际大小。
如果应用了静态空间数组,则sizeof返回所有数组的大小。
sizeof操作符不能返回动态分配的数组或外部数组的大小
笔者领悟:
我的误解是sizeof和strlen都是返回字符串的长度,但其实其中真的有很多幼稚的地方,我想很多程序员一开始也很困惑。
char * test=“daoluan "
sizeof的结果是4,明显是类型的大小; 然后,strlen的调用结果是6,这里strlen聪明多了。
char test[10]=“daoluan”;
sizeof的结果为10 (在编译过程中准备),strlen的结果为6。 在这里strlen也很聪明。
这样的结果很明显。
2011-12-10补充:
声明字符数组。 例如,当char str[9]一起赋值时,有些人会说。
char str[9]='abcdefghi '; //9个字,没错啊
很遗憾,编译器不允许。 在字符数组中,数组的最后一个值必须为 (即空格)。 因此,上述句子是错误的。
应该改为:
char str[9]='abcdefgh '
ZeroMemory和memset
两者的功能相同,将内存的一部分内容设为0。 当然,前者必须是memset(valiable,0,sizeof ) ) ) ) )。
所以比较起来,还是memset的功能有点强大,还是不用放0。
memset(valiable,1,sizeof ) valiable )。
memset函数是C Run-time Library或我们熟悉的c运行时库,而ZeroMemory是win32 api的版本。 在需要跨平台时使用memset,在win下工作时使用ZeroMemory也不为过。
必须明确ZeroMemory在win32下是宏,不是函数。
这是基础性的,但我发现在学习中没有注意。 我希望能帮助很多初学者。
完成正文2011-12-10 (更新)