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));
人生虚度也是过,充实点也是过@等到老了充实的老年痴呆都不会犯。。。

浙公网安备 33010602011771号