`
大灰狼94灰_
  • 浏览: 11993 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

strcpy和strlen的C语言实现

阅读更多

1.strcpy方法:

char * strcpy( char *strDest, const char *strSrc )

{


 assert( (strDest != NULL) && (strSrc != NULL) );

 char *address = strDest; //指针指向存放拷贝的字符串的数组的首元素位置

 while( (*strDest++ = * strSrc++) != ‘\0’ ); //当没有遇到字符‘\0’时,把数组strSrc中的元素一次赋值到strDest数组的响应位置

  return address;//返回数组首地址的指针,相当于数组名

}



2. strlen方法:,它没有包括字符串末尾的'\0'。

int strlen( const char *str ) //输入参数const

{

 assert( strt != NULL ); //断言字符串地址非0

 int len;

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

 {

  len++;

 }

 return len;

}

 

1
0
分享到:
评论
4 楼 kingyueyang 2013-04-26  
mike.liu 写道
kingyueyang 写道
mike.liu 写道
int strlen( const char *str ) //输入参数const
{
 assert( strt != NULL ); //断言字符串地址非0
  for (const char* p = str; *p; p++)
    ;
  return p-str;
}


这样循环内部执行的语句少些(不用每次len++),不知道是否性能会高些?
但是我知道,似乎MS的lib里面,strlen不是这样实现的,它好像把str转成int*,然后怎么做,忘记了。这样可以减少循环次数。


这样做循环里同样做了 p++, 开销比 len++ 小吗?


原来的循环,每次要执行两个++:str++和len++。我这个只执行p++。理论上会性能好些。


:) 我应该objdump一下
3 楼 mike.liu 2013-03-25  
kingyueyang 写道
mike.liu 写道
int strlen( const char *str ) //输入参数const
{
 assert( strt != NULL ); //断言字符串地址非0
  for (const char* p = str; *p; p++)
    ;
  return p-str;
}


这样循环内部执行的语句少些(不用每次len++),不知道是否性能会高些?
但是我知道,似乎MS的lib里面,strlen不是这样实现的,它好像把str转成int*,然后怎么做,忘记了。这样可以减少循环次数。


这样做循环里同样做了 p++, 开销比 len++ 小吗?


原来的循环,每次要执行两个++:str++和len++。我这个只执行p++。理论上会性能好些。
2 楼 kingyueyang 2013-01-11  
mike.liu 写道
int strlen( const char *str ) //输入参数const
{
 assert( strt != NULL ); //断言字符串地址非0
  for (const char* p = str; *p; p++)
    ;
  return p-str;
}


这样循环内部执行的语句少些(不用每次len++),不知道是否性能会高些?
但是我知道,似乎MS的lib里面,strlen不是这样实现的,它好像把str转成int*,然后怎么做,忘记了。这样可以减少循环次数。


这样做循环里同样做了 p++, 开销比 len++ 小吗?

1 楼 mike.liu 2012-12-28  
int strlen( const char *str ) //输入参数const
{
 assert( strt != NULL ); //断言字符串地址非0
  for (const char* p = str; *p; p++)
    ;
  return p-str;
}


这样循环内部执行的语句少些(不用每次len++),不知道是否性能会高些?
但是我知道,似乎MS的lib里面,strlen不是这样实现的,它好像把str转成int*,然后怎么做,忘记了。这样可以减少循环次数。

相关推荐

Global site tag (gtag.js) - Google Analytics