以实例来说明strlen()和sizeof()的区别

来源:互联网 发布:无线wifi网络电视 编辑:程序博客网 时间:2024/06/01 10:04

机器:Win8.1 64位专业版

1)strlen计算的是字符串的长度,只能用char*做参数,且必须是以''\0''结尾的。
     sizeof计算的是变量使用的内存大小,不受里面存储的内容改变,一般都是类型作为参数,(所以用它拿来给一        些变量什么的       做参数,感觉不好,为什么出这么多难为人的题目呢?)


    int ss[100] = "0123456789";
    sizeof(ss) //结果 400 ===>ss表示再内存中的大小 100×4,int占4个字节(win)
    strlen(ss)// 错误 ===>strlen的参数只能是char* 且必须是以''/0''结尾的

     

2)sizeof是运算符,如果是普通的变量名可以不加括号,如果是类型必须加,strlen是函数,必须加括号
      

    sizeof c;//变量名可以不加括弧
    sizeof(int);//语言中的类型必须加()


3)和指针有关的,比较容易错的问题


   char* ss = "0123456789";
   sizeof(ss);//结果 4 ===>ss是指向字符串常量的字符指针
   sizeof(*ss);//结果 1 ===>*ss是第一个字符
   size传入参数指针时如何判断,按照网上的说法:当操作数是指针时,,sizeof依赖于编译器。例如Microsoft           C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。这里就想到了为什    么在网络编程中经常出现char far *的原因了。


4)用编译的思想理解


   char str[20]="0123456789";//str是编译期大小已经固定的数组
   int a=strlen(str); //a=10;//strlen()在运行起确定
   int b=sizeof(str); //而b=20;//sizeof()在编译期确定

网络试验中的一个代码片段:

    结果:



  在网络实验中因为这两个函数导致出错,服务器端在send()中将发送长度用sizeof()传过去,参数是指针,按照上面的分析,其实只是个4bytes的数,所以服务器的25bytes长的数据,只有4bytes传过去,所以客户机只接受到了“FRI“。

0 0
原创粉丝点击