C语言之——strlen()与sizeof()

    技术2024-07-25  15

    strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'/0'为止,然后返回计数器值。

     

    函数原型:extern unsigned int strlen(const char *s);

    头文件:string.h

     

    与sizeof()的区别:

    strlen(char *)函数求的是字符串的实际长度,它求得方法是从字符串首地址开始扫描直到遇到'/0',如果只定义了一个字符串而没有给它赋值,对其求strlen的结果是不确定的。

    char aa[10];cout<<strlen(aa)<<endl;     //结果是不定的

    char aa[10]={'/0'};cout<<strlen(aa)<<endl;     //结果是0

    char aa[10]="jun";cout<<strlen(aa)<<endl;      //结果是3

    sizeof()求的是变量声明后所占的内存数,不是长度,并且sizeof不是函数,它是一个操作符。

    区别可以总结为:

    1.sizeof是操作符,strlen是函数

    2.sizeof可以用类型做参数,strlen只能用char *做参数,且必须以'/0'结尾3.一般情 况下,sizeof在编译阶段就计算过了,而strlen的值是在运行时才确定的。

     

    举例:

    main(){ char * s="123"; char ss[]="123"; char sss[10]="123"; printf("/n%d ",strlen(s));//3 printf("%d ",strlen(ss));//3 printf("%d ",strlen(sss));//3 printf("%d ",sizeof(s));//2 printf("%d ",sizeof(ss));//4 printf("%d ",sizeof(sss));//10}

     

    class X

      {

      int i;

      int j;

      char k;

      };

      X x;

      cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐

      cout<<sizeof(x)<<endl; 结果 12 同上

     

     

    自定义函数实现strlen()函数的功能  下面几种实现strlen函数的源代码大家参考

      -------------------------------------------------1:start------------------------------------

      #include <stdio.h>

      #include <assert.h>

      typedef unsigned int u_int;

      u_int Mystrlen(const char *str)

      {

      u_int i;

      assert(str != NULL);

      for (i = 0; str[i]!= '/0'; i++);

      return i;

      }

      ------------------------------------------------1:end--------------------------------------

      -------------------------------------------------2:start--------------------------------------

      int strlen(const char *str)

      {

      assert(str != NULL);

      int len = 0;

      while((*str++) != '/0')

      len++;

      return len;

      }

      ------------------------------------------------2:end ------------------------------------------

      ------------------------------------------------3:start------------------------------------------

      int strlen(const char *str)

      {

      assert(str);

      const char *p = str;

      while(*p++!=NULL);

      return p - str - 1;

      }

      -------------------------------------------------3:end-----------------------------------------

      -------------------------------------------------4:start----------------------------------------

      int strlen(const char *str)

      {

      assert(str);

      if (*str==NULL)

      return 0;

      else

      return (1 + strlen(++str));

      }

      -----------------------------------------------4:end----------------------------------------

      以上各种实现的方式都是大同小异的,有的用的是变量,有的用的是指针。

      其中,最后一个用的是递归的方式。其实,在实现库函数的时候,是规定不可以

      调用其他的库函数的,这里只是给大家一个方法,不用变量就可以实现strlen。

    最新回复(0)