aurain
技术文摘
posts - 137,  comments - 268,  trackbacks - 0

最近查看了微软的c标准库针对字符串操作的部分源代码,整理了一下放上来
char * strcat(char * dst, const char * src)
{
 char * cp = dst;
 
 while(*cp)
 {
  cp++;  /* find end of dst */
 }
 
 while (*cp++ = *src++); /* Copy src to end of dst */
 
 return dst; /* return dst */
}

char * strcpy(char * dst, const char * src)
{
 char * cp = dst;
 
 while (*cp++ = *src++);  /* Copy src over dst */
 
 return dst;
}

char * strchr(const char * string, int ch)
{
 while (*string && *string != (char)ch)
 {
  string++;
 }
 
 if (*string  == (char)ch;
  return (char *)string;
 
 return NULL;
}

int strcmp(const char * src, const char * dst)
{
 int ret = 0;
 
 while (!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
  ++src, ++dst;
  
 if ( ret < 0 )
   ret = -1 ;
  else if ( ret > 0 )
   ret = 1 ;

  return( ret );
}

size_t strlen(const char * str)
{
 const char * eos = str;
 
 while (*eos++);
 
 return (int)(eos - str - 1);
}

char * strstr(const char * str1, const char * str2)
{
 char * cp = (char *)str1;
 char *s1, *s2;
 
 if (!*str2)
  return (char *)str1;
 
 while (*cp)
 {
  s1 = cp;
  s2 = str2;
  
  while (*s1 && *s2 && !(*s1-*s2))
   s1++, s2++;
  
  while (!*s2)
   return cp;
  
  cp++;
 }
 
 return NULL;
}

posted on 2008-03-27 09:47 阅读(1507) 评论(5)  编辑 收藏 引用 所属分类: c/c++基础知识

FeedBack:
# re: 微软c标准库中字符串操作源代码
2009-11-29 23:59 | sophister
谢谢你的分享!!
我有一个疑问:
在strcmp里的while里是不是少了对*src == '\0'的检查啊??
  回复  更多评论
  
# re: 微软c标准库中字符串操作源代码
2009-11-30 00:02 | sophister
哦,好像看懂了,不用检查src也是可以的在这里,果然精辟!!

谢谢你的分享!!  回复  更多评论
  
# re: 微软c标准库中字符串操作源代码
2009-11-30 18:33 |
@sophister
不客气了  回复  更多评论
  
# re: 微软c标准库中字符串操作源代码
2011-01-10 15:02 | xiang
请问在哪找的  回复  更多评论
  
# re: 微软c标准库中字符串操作源代码
2011-01-10 16:38 |
@xiang
直接转到函数定义就可以看到了  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(17)

随笔分类(138)

随笔档案(137)

网络开发

最新随笔

搜索

  •  

积分与排名

  • 积分 - 493614
  • 排名 - 36

最新随笔

最新评论

阅读排行榜

评论排行榜