#include <stdio.h> void *my_memset(void *s, int val, size_t size) { char *ps = s; while (size--) { ps[size] = val; } return s; } void *my_memcpy(void *dest, const void *src, size_t size) //must not overlo { char *pdest = dest; const char *psrc = src; while (size--) { *pdest++ = *psrc++; } return dest; } void *my_memmove(void *dest, const void *src, size_t size) //Could deal with overlap { char *pdest = dest; const char *psrc = src; if (psrc < pdest && psrc + size > pdest) { while (size--) pdest[size] = psrc[size]; } else { while (size--) *pdest++ = *psrc++; } return dest; } int main(int argc, char **argv) { char s1[30] = "ajjkdsjfhdjhasjaskjj"; char s2[10] = "hafjjhjhj"; // printf("%s\n", my_memset(s1, 'x', 9)); // printf("%s\n", my_memcpy(s1, s2, 9)); printf("%s\n", my_strncpy(s1, s2, 10)); // printf("%s\n", memmove(s1, s1 + 2, 9)); return 0; } attention: memmove: ________________________ | _______________*dest_____| head __________ |____|____________________| |______*src_|____| overlop(1) ________________________ | ___________*dest________| |__________________|______|__________ head |______|______*src__| | overlop (2) |
|
来自: zxlvxj > 《Linux库函数》