1.strcmp
#include <stdio.h>
int strcmp(const char *s1, const char *s2)
{
char a1, a2;
//assert(s1)
//assert(s2)
while (1) {
a1 = *s1++;
a2 = *s2++;
if (a1 != a2) {
return a1 - a2;
}
if (a1 == 0)
break;
}
return 0;
}
int main(int argc, char *argv[])
{
printf("strcmp=%d\n", strcmp(argv[1], argv[2]));
}
2.memcpy
void *memcpy(void *dst, const void *src, size_t len)
{
printf("len=%ld\n", len);
const char* s = (const char *)src;
char* d = (char *)dst;
if (src == NULL || dst == NULL) {
return NULL;
}
//顺序拷贝
if (d <= s) {
printf("len=%ld\n", len);
while (len != 0) {
*d++ = *s++;
len--;
}
} else { //倒序拷贝
while (len != 0) {
len--;
*(d + len) = *(s + len);
}
}
return (void *)dst;
}
注意点:
1.void*空指针不能直接操作加减,需要先转成char *然后再操作
2.要考虑内存重叠问题,这里是分为顺序拷贝和倒序拷贝
3.注意size_t是unsigned int类型,减到0再减的话,会变成大整数而不是负数,如果使用while(--len <= 0)这里可能会出现core dump
网友评论