我是靠谱客的博主 坚定寒风,最近开发中收集的这篇文章主要介绍strcpy,memcpy,memmove的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.memcpy与strcpy

strcpy和memcpy主要有以下3方面的区别。

1.复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2.复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符""才结束,如果空间不够,就会引起内存溢出。memcpy则是根据其第3个参数决定复制的长度。
3.用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy,由于字符串是以“”结尾的,所以对于在数据中包含“”的数据只能用memcpy。
 

#include<string>
#include<iostream>
using namespace std;
//strlen strcpy memcpy
struct tag_stu
{
	char number;
	char name;
};
//memcpy 不会补充,告诉他拷贝几个字节,他就拷贝几个字节
//strcpy 会拷贝
int main()
{
//先来测试下memcpy
	struct tag_stu test = {'h','z'};

	char *p = new char[3];
	memset(p, 0, strlen(p) + 1);
	memcpy(p,&test,sizeof(test));
	cout << p <<strlen(p)<< endl;

	char *src = "zhang";
	cout << strlen(src) << endl;
	char *dst = new char[strlen(src) + 1];
	dst[5] = 'i';//为了验证strcpy会复制过来
	strcpy(dst, src);
	cout << dst << endl;
	return 0;
}

输出如下所示:

hz2

5

zhang

二.memcpy与memmove

void *memcpy(void *dst, const void *src, size_t count);
void *memmove(void *dst, const void *src, size_t count);

他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。

最后

以上就是坚定寒风为你收集整理的strcpy,memcpy,memmove的区别的全部内容,希望文章能够帮你解决strcpy,memcpy,memmove的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部