strcmp, strlen, strcpy, strccat标准库的实现

看boost库时提到就最近写下看有什么问题,在strcmp函数的实现时偷看了网上源码:

 1 #include <iostream>
 2 #include  <boost/lexical_cast.hpp>
 3 
 4 using namespace std;
 5 
 6 unsigned int strlen(char* src)
 7 {
 8     if (!src)
 9         return 0;
10     int sLen = 0;
11     while (src != '\0')
12     {
13         src ++;
14         sLen ++;
15     }
16     return sLen;
17 }
18 
19 int strcmp(const char* s1, const char* s2)
20 {
21   while(*s1 == *s2)
22     {
23       if (*s1 == '\0')
24     return 0;
25       s1 ++;
26       s2 ++;
27     }
28   return *s1 - *s2;
29 }
30 
31 char *strcat(char* dest, char *src)
32 {
33   char *temp = dest;
34   while(*dest != '\0')
35     dest++;
36   while(*src != '\0'){
37     *dest = *src;
38     dest ++;
39     src ++;
40   }
41   return temp;
42 }
43 
44 char *strcpy(char* dest, const char* src)
45 {
46   if (dest == NULL || src == NULL)
47     return NULL;
48   char *temp = dest;
49   while (*src != '\0'){
50     *dest = *src;
51     dest ++;
52     src ++;
53   }
54   return temp;
55 }
56 
57 int main()
58 {
59   char buffer[10];
60   int a = boost::lexical_cast<int>("123456");
61   cout << "a : " << a << endl;
62   a = strlen("");
63   cout << "a : " << a << endl;
64   a = strcmp("abcd", "abc");
65   cout << "a : " << a << endl;
66   strcpy(buffer, "abc");
67   cout << "buffer : " << buffer << endl;
68   strcat(buffer, "cba");
69   cout << "new buffer : " << buffer << endl;
70   
71 }

此处应该意识到strcpy和strcat返回为dest的指针,先用一个临时变量存储dest指针位置再做相应的操作。返回char* 作用为便于实现链式访问,参见下列的代码 strcat(a, strcat(b, c));

posted @ 2015-09-15 14:31  Fr2eW0lf  阅读(90)  评论(0)    收藏  举报