#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
void *mymemcpy(
void *dest,
const void *src, size_t n)
{
char *d = (
char*)dest;
char *s = (
char*)src;
while(n--)
*d++ = *s++;
return dest;
}
void *mymemset(
void *src,
int ch, size_t n)
{
assert(src != NULL);
char *tempsrc = (
char *)src;
while (n--)
*tempsrc++ = (
char)ch;
}
char *mystrlen(
char *dest,
const char *src)
{
if ((dest == NULL) || (src == NULL))
return NULL;
if (dest == src)
return dest;
char *tempdest = dest;
while ((*dest++ = *src++) !=
'\0');
return tempdest;
}
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";
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);
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