首页
社区
课程
招聘
程序开发这条路可以走多久
2010-7-4 10:09 8770

程序开发这条路可以走多久

2010-7-4 10:09
8770
Memcpy与memmove的思考

作者:ssLong  QQ:253651745
马上就要找工作了,正所谓“凡是预则立,不预则废”,所以希望趁着现在还比较清闲的时候复习一下,所学的知识,如C/C++、数据结构、数据库、操作系统等等。
同时也是因为前两天去面试,一道简单的程序都没写出来因此也是倍受打击,想恶补复习一下。
最主要的是,虽然通过初级程序员、软件设计师考试,但是发现很多简单基础的问题还是一头雾水,可能简单的程序不会有问题,毕竟也写过一些,如什么键盘记录器、C下的五子棋、模拟windows系统实现的功能、web开发、系统扫描、抓包程序等等。但是一涉及到基础较真的时候没有勇气说是与不是,都是可能大概也许或者,因为这些问题真的不能确定了。

所以我想复习一下所学知识,开始了选择的是宋劲杉老师编著的《Linux C编程一站式学习》,同时也是想通过复习,学习一下Linux开发,也是补充的一个方面吧。可以说这本书还是很不错的,出于复习的目的,可能看的稍微快些,毕竟有些知识还是懂的,因此几天后就已经看到最后了(但是觉得还有看一遍做总结的必要)。当看到24章memcpy与memmove的时候 我写下了本文。

为了练习这两个函数的用处做了一个小程序进行验证
#include <stdio.h>
#include <string.h>

Int main(void)
{
   Char buf[20] = “hello world\n”;
   Memcpy(buf + 1, buf , 13);
   Prinft(“%s”, buf);
   Return 0;
}

Memcpy就是将原指针开始的n个字符拷贝到目标指针开始的n的字节位置中,我笨想本程序的结果也是hhello world,但是世间事就是这么的复杂,让人难以琢磨,无法理解,无法预测,最后显示的结果却是hhhllooworrd这个结果真是让我诧异半天呀!怎么会是这样呢?真是百思不得其解。没有办法继续看书,原来是memcpy实现有问题,当然也是作者的猜测....

但是将memcpy改成memmove就可以得到预期的结果。最终的结论是memcpy的两个参数src和dest所指的内存区间如果重叠则无法保证正确拷贝,而mommove去可以正确拷贝。

唉,真是的调用C提供的函数都能出现问题,这个问题若是不在这里遇到,当我写的程序出现问题,我怎么都不会想到是memcpy出现了差错,由此也可见,编程是多么复杂的一件事情,有人就仿佛是破案,真的有点像呀。前两天也是,给海天写个网站显示的GridView分页功能,前面的复选框选中,但是程序中就是不能判定其选中的值,这问题让我苦思冥想了很多天,刚开始以为是程序写错了,其实这部分功能是从以前的一个功能模块中拷贝出来的,只是略加修改没有想到就是实现不了,终于有一天,不知道是多少个痛苦过后,我发现了问题所在,是因为程序在Page_load中进行的绑定GridView控件,这样当选中复选框,点击 按钮时,会重新执行Page_load函数,则重新进行了绑定,当然复选框中的值就没有了,呵呵,原来如此,当大功告成、发现问题的时候,欢喜是无以言表的,真是喜出望外,这个词好像也无法形容。这时体会的也是编程最大的乐趣,但同时此时的快乐也取决你前期的痛苦,前期痛苦的越深,那么此时快乐的越高,正所谓没有苦,就没有甜!

从一个还没有真正在公司编过程序的小学生角度来看编程,总是感觉它是那么深奥,可以让你痛苦不已,同时可以让你欣喜若狂。这些我也都经历过!但是我又能在这条路上走多远,也许...也许...只有在以后的以后才能有答案。

在此谨以此文告诫自己,如果我真的选择了这条路,那就要准备好风雨兼程....

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞6
打赏
分享
最新回复 (10)
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xouou 2010-10-3 01:38
2
0
一盏指路明灯 照亮一人是一人
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aait 2010-10-3 14:53
3
0
memcpy的两个参数src和dest所指的内存区间如果重叠则无法保证正确拷贝

这个函数写得实在是太差。肯定没经过测试就拿出来用了。
雪    币: 166
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
havezmg 2010-10-7 13:35
4
0
随手写了一个。呵呵
上传的附件:
雪    币: 205
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
楚留香 2010-10-7 18:40
5
0
学习了,谢谢分享
雪    币: 87
活跃值: (25)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
Possible 2011-5-9 15:47
6
0
谢谢 各位观看 继续学习...
雪    币: 215
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caocunt 2013-4-2 08:57
7
0
vc2010结果正确,楼主你用的什么编译器?
雪    币: 794
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 8 2013-4-2 09:08
8
0
memcpy (包含RtlCopyMemory CopyMemory,strncpy)都痴线了。、、
上传的附件:
雪    币: 264
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
k4b 2013-4-8 23:33
9
0
哈哈,我不写程序了,就等着你们写好了 再买过来用,反正都是白菜价。
雪    币: 267
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
lifeowner 2013-4-9 00:05
10
0
可以有多种方向,比如公务员码农,哈哈
雪    币: 87
活跃值: (25)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
Possible 2013-4-15 09:59
11
0
公务员码农 是什么码农
游客
登录 | 注册 方可回帖
返回