strcpy 与memcpy

2024-05-12 12:48
文章标签 memcpy strcpy

本文主要是介绍strcpy 与memcpy,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

strcpy和memcpy的区别

strcpy和memcpy都是标准C库函数,它们有下面的特点。
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
void *memcpy( void *dest, const void *src, size_t count );

char * strcpy(char * dest, const char * src) // 实现src到dest的复制
{
  if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性
  {
 
      return NULL;
  }
  char *strdest = dest;        //保存目标字符串的首地址
  while ((*strDest++ = *strSrc++)!='\0'); //把src字符串的内容复制到dest下
  return strdest;
}
void *memcpy(void *memTo, const void *memFrom, size_t size)
{
  if((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效
         return NULL;
  char *tempFrom = (char *)memFrom;             //保存memFrom首地址
  char *tempTo = (char *)memTo;                  //保存memTo首地址     
  while(size -- > 0)                //循环size次,复制memFrom的值到memTo中
         *tempTo++ = *tempFrom++ ; 
  return memTo;
}

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

这篇关于strcpy 与memcpy的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982670

相关文章

strcpy复制一个字符串

看似很简单的题目,其实有着很多陷阱 首先看一个错误的范例: char  *r; strcpy(r,s); strcat(r,t); 错误在于:r并未指定地址且未赋予内存空间 好了,该如何做呢 首先,肯定得考虑内存的分配 使用malloc   显式调用分配内存 则也得显式调用释放内存free 不多说了 上代码 char *r; r=malloc(strlen(s)+strle

memcpy 和 memmove区别

‌memcpy和memmove的主要区别在于它们处理内存区域重叠的能力不同。‌ ‌处理内存区域重叠的能力‌: ‌memcpy‌不支持内存区域的复制如果源和目标内存区域重叠,memcpy的行为是未定义的。这意味着,如果尝试使用memcpy复制重叠的内存区域,可能会导致数据损坏或不可预测的行为。‌memmove‌则支持内存区域的复制,即使源和目标内存区域重叠。当发生重叠时,memmove会正确地处

警惕memcpy()函数越界

在维护一个工程师的代码时,发现memcpy()导致越界

函数(void*)memcpy(voidnbsp;*dest,con…

函数原型  void *memcpy(void *dest, const void *src, int n); 功能   从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 所需头文件   #include <string.h> 返回值   函数返回一个指向dest的 指针。 说明   1.source和destin所指内存区域不能重叠,函数返回指向dest

c memcpy 与 strcpy 区别

memcpy与strncpy区别     strncpy是把Num个字符从src复制到dest,但是如果遇到src字符结尾,那么复制提前结束,后面没有复制完的字符,不予以处理,当然dest,src地址不能重叠,     memcpy也是把Num个字符从src复制到dest,但是它是内存复制,不管是不是NULL,照样通吃

不同内存对齐方式 memcpy之后数据错误

一.背景: 1.使用#pragma定义结构体:RECV_CMD_DATA_t和RECV_CMD_PACK_t,按照1字节进行内存对齐 #pragma pack(1)typedef struct recv_cmd_data{int iType;long long llInt;int iLen;char

字符串之strcpy实现

字符串之strcpy实现 #include <iostream>#include<assert.h> #include<string.h> using namespace std; char* strcpyT(char * des,const char * src) {     assert((src!=NULL)&&(des!=NULL));     char * p=des;

VS解除strcpy_s的错误

此方法出错,并非真正有什么错误,而是微软认为这样用不安全,微软推荐用strcpy_s代替。 但对于strcpy_s并非出自标准C,不方便代码的移植,为了阻止编译器报错,可以点击工程属性, "Configuration Properties"->"C/C++"->"Preprocessor"->"Preprocessor “ 如果是vs2017中文版,则是 “项目“->”属性页“->"C/C+

解决c语言中调用scanf()或者strcpy()函数报错问题

引言    最近在使用VS实现C语言程序的时候经常会遇到一些错误,但是这些函数的确是可以正确使用的,可能在 vc++6.0上就可以正常运行,很多参考书的代码都是以vc++6.0为标准的代码,所以这样我们在实现demo的时候会花费 一下时间在没有必要的错误上面,下面就给大家介绍一些解决方案。   问题重现   error C4996: 'scanf

memcpy函数,自动获取LCD硬件参数

示例:将开发板颜色变为红色 #include<stdio.h>#include<unistd.h>#include<sys/mman.h>#include<string.h>#include<fcntl.h>#include<linux/fb.h>int main(){// 以读写权限打开液晶屏文件int lcd = open("/dev/fb0", O_RDWR);// 给LCD设