memcpy的初次认识与理解

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

//模拟memcpy

void my_momcpy(char *dest, const char *str, int count)

{

assert(dest != NULL);

assert(str != NULL);

char *ret = dest;

int i = 0;

for (i = 0; i < count; i++)

{

*dest++ = *str++;

}

}

int main()

{

char a[100] = "abcdef" ;

my_momcpy(a + 1, a + 2, 2);

printf( "%s\n", a);

system( "pause");

return 0;

}

/* MEMCPY.C: Illustrate overlapping copy: memmove

* handles it correctly; memcpy does not.

*/

#include <memory.h>

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

char string1[60] = "The quick brown dog jumps over the lazy fox" ;

char string2[60] = "The quick brown fox jumps over the lazy dog" ;

/*                           1         2         3         4         5

*                  12345678901234567890123456789012345678901234567890

*/

void main(void )

{

printf( "\t\t%s\n", string1);

printf( "\t\t%s\n", string2);

printf( "Function:\tmemcpy without overlap\n" );

printf( "Source:\t\t%s\n", string1 + 40);

printf( "Destination:\t%s\n", string1 + 16);

memcpy(string1 + 16, string1 + 40, 3);

printf( "Result:\t\t%s\n", string1);

printf( "Length:\t\t%d characters\n\n" , strlen(string1));

/* Restore string1 to original contents */

memcpy(string1 + 16, string2 + 40, 3);

printf( "Function:\tmemmove with overlap\n" );

printf( "Source:\t\t%s\n", string2 + 4);

printf( "Destination:\t%s\n", string2 + 10);

memmove(string2 + 10, string2 + 4, 40);

printf( "Result:\t\t%s\n", string2);

printf( "Length:\t\t%d characters\n\n" , strlen(string2));

printf( "Function:\tmemcpy with overlap\n" );

printf( "Source:\t\t%s\n", string1 + 4);

printf( "Destination:\t%s\n", string1 + 10);

memcpy(string1 + 10, string1 + 4, 40);

printf( "Result:\t\t%s\n", string1);

printf( "Length:\t\t%d characters\n\n" , strlen(string1));

system( "pause");

}

时间: 2024-10-08 19:11:16

memcpy的初次认识与理解的相关文章

【转】 TechED2010与我(三) —— 初识云计算

作者用到的比喻很好. 网址:TechED2010与我(三) -- 初识云计算 初识云计算最近"云计算"被炒的很热,但是由于工作重点主要是做WinForm的控件开发,对云计算的接触比较少,甚至一直没搞清楚到底什么是"云计算",感觉上"云"是个神乎其神的东西.这次借参加Tech-ed的机会重点了解了下"云计算".写篇博文分享一下自己的理解.初次接触,理解的比较肤浅,如果有误欢迎大家指正.1. 为什么需要云计算 微软给了个很有意思的

物体轮廓检测

int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,int header_size=sizeof(CvContour),int mode=CV_RETR_LIST,int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) ); 这个函数用起来很方便,但是随着你使用的深入,你会发现有一些迷惑在这里.比如当你提取轮廓时只需要最外

精品图书推荐

书籍介绍 图书 推荐理由 建议搭配阅读的书籍及推荐理由 如果有人让我推荐一本书,我首先会推荐他<代码大全>.这是一本跨语言的书籍,虽然名字给人的感觉是一本代码速查手册,但其实这是一部阐述软件构建流程,面向对象思想以及程序员开发修养的巨著.这是一部值得你细心翻阅的图书,虽然撰写的时间比较早,部分章节的内容已经有些过时,但其对编程思想,软件构架流程的精彩论述,值得读者细心挖掘和体会.时至今日,我依旧认为这部著作的对于面向对象编程最好的入门书籍.其面向的读者,不限制于软件开发者,对于项目管理者同样有

稀疏编码之字典学习

稀疏信号的一个最重要的部分就是字典A.那么选择A?怎么样选择才是合理? 一.字典的选择和学习 如何选择合适的字典,一种基本的方法是选择预定义的字典,如无抽样小波.可操纵小波.轮廓博.曲波,等等.近期很多学者提出来主要针对图像的字典,特别是类似于“卡通”的图像内容,假设分段平滑并具有平滑边界. 这些提出的字典附有详细的理论分析,能够对简单信号建立稀疏表示系数.一个典型的应用时M项近似衰减率——用M个最佳的非零系数表示信号. 另一种选择字典的方法是可调节的——通过在特定参数(连续或者离散的)控制下生

稀疏学习之设计字典

稀疏信号的一个最重要的部分就是字典A.那么选择A?怎么样选择才是合理? 一.字典的选择和学习 如何选择合适的字典,一种基本的方法是选择预定义的字典,如无抽样小波.可操纵小波.轮廓博.曲波,等等.近期很多学者提出来主要针对图像的字典,特别是类似于“卡通”的图像内容,假设分段平滑并具有平滑边界. 这些提出的字典附有详细的理论分析,能够对简单信号建立稀疏表示系数.一个典型的应用时M项近似衰减率——用M个最佳的非零系数表示信号. 另一种选择字典的方法是可调节的——通过在特定参数(连续或者离散的)控制下生

memcpy、memmove、memset及strcpy函数实现和理解

memcpy.memmove.memset及strcpy函数实现和理解 关于memcpy memcpy是C和C++ 中的内存拷贝函数,在C中所需的头文件是#include<string.h>, 在C++中需要包含的头文件是#include其函数原型如下: void *memcpy(void *dest, const void *src, size_t n); 其功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 库函数中的memcpy不能处理sr

初次理解进程和程序

通过学习<深入理解计算机系统>后自己理解的进程和程序. 专业一点就是:1.程序的一个执行实例. 2.能分配处理器并由处理器执行的实体. 3.担当分配系统资源(CPU时间,内存)的实体. 通俗的来说  :1.进程就是正在执行的程序. 2.进程是动态的,程序是静态的.(也是实质的区别) 下来说下一个进程的过程(内存方面).

php5.3中namespace的说明,帮助初次接触namespace的phper快速理解

命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀,但是方法名变的很长了,而且仍可能重名.为了避免这一情况,启用命名空间,虽然会增加一了一点使用麻烦度. 文档copy了段:什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念.例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色.具体举个例子,

Memcpy, blockcopy的进一步理解

using System; using System.Runtime.InteropServices; using System.IO; namespace tx { struct ST { public byte c1; public float x; public int y; } class Ct { [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConve