C语言memset、memcpy、memmove和strcpy

    xiaoxiao2026-10-07  0

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> /*************** src拷贝长度n给dset *******************/ void *mymemcpy(void *dest, const void *src, size_t n) { char *d = (char*)dest; char *s = (char*)src; while(n--) *d++ = *s++; return dest; } /*************** src赋值为ch,共赋值n个 *******************/ void *mymemset(void *src, int ch, size_t n) { assert(src != NULL); char *tempsrc = (char *)src; while (n--) *tempsrc++ = (char)ch; //return src; } char *mystrlen(char *dest, const char *src) { //dest和src不相等且不为NULL if ((dest == NULL) || (src == NULL)) return NULL; if (dest == src) return dest; char *tempdest = dest; while ((*dest++ = *src++) != '\0'); return tempdest; } /*************** src拷贝长度n给dset *******************/ void *mymemmove(void *dest, const void *src, size_t n) { char temp[n]; int i; char *d = (char*)dest; const char *s = (const char *)src; for (i = 0; i < n; i++) temp[i] = s[i]; for (i = 0; i < n; i++) d[i] = temp[i]; return dest; } int main() { char a[] = "11111111111111"; char b[] = "22222222222222222"; char c[] = "333333"; char d[] = "4444"; char e[] = "55555555555555"; char f[] = "66666666666"; char g[] = "777777777777777777"; //mymemcpy(a,2,3); mymemset(a, '+', 7); printf("b[] == %s\n", b); mymemcpy(b,a,10); printf("a[] == %s\n", a); printf("b[] == %s\n", b); mystrlen(c,d); printf("c[] == %s\n", c); printf("d[] == %s\n", d); strcpy(e, "111"); printf("e[] == %s\n", e); //memcpy和memmove区别是,当内存发生局部重叠的时候 //memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确 mymemmove(f,g,5); printf("f[] == %s\n", f); printf("g[] == %s\n", g); return 0; }

    memcpy和strcpy区别 1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。 2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符”\0”才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。 3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

    memcpy和memmove的区别 1.内存重叠memcpy会有出现问题,memcpy是memmove的一部分

    转载请注明原文地址: https://ju.6miu.com/read-1312706.html
    最新回复(0)