您的位置:首页 > 编程语言 > C语言/C++

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

2011-02-01 17:56 393 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: