1 /* strlen */
2 int strlen(const char *s)
3 {
4 const char *sx = s;
5 while (*sx++ != '\0')
6 ;/* do nothing */
7 return sx - s;
8 }
1 /* strcpy */
2 char* strcpy(char *dest, const char *src)
3 {
4 char *s = dest;
5 while ((*s++ = *src++) != '\0')
6 ;/* do nothing */
7 return dest;
8 }
1 /* strncpy */
2 char* strncpy(char *dest, const char *src, int n)
3 {
4 char *s = dest;
5 while (n--)
6 {
7 if ((*s++ = *src++) != '\0')
8 src++;
9 s++;
10 }
11 return dest;
12 }
1 /* memcpy 无法处理address overlapping问题 */
2 void* memcpy(void *dest, const void *src, size_t count)
3 {
4 char *d = dest;
5 const char *s = src;
6 while (count--)
7 *d++ = *s++;
8 return dest;
9 }
1 /* memmove
2 * Unlike memcpy, memmove copy with overlapping area */
3 void* memmove(void *dest, const void *src, size_t count)
4 {
5 char *d = dest;
6 const char *s = src;
7
8 if (dest <= src)
9 {
10 while (count--)
11 *d++ = *src++;
12 }
13 else
14 {
15 d += count;
16 s += count;
17 while (count--)
18 *--d = *--s;
19 }
20 return dest;
21 }