内存拷贝和字符串拷贝
来源:互联网 发布:淘宝10元包邮在哪 编辑:程序博客网 时间:2024/05/17 06:04
这两个题是面试中的常考题
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include
void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
1 先讨论下字符串拷贝,因为这个比较简单,但是还是有一些细节需要注意。我面试的时候就忘了写const
//为了防止源字符串被修改,src应该为constchar *strcpy(char *dst, const char *src); { //空指标检查 assert((dst!=NULL) && (src !=NULL)); char *address = dst; while( (*dst++ = *src++) != ‘/0’ ) NULL ; return address ; }
2 内存拷贝,分为两种情况,一种是源内存区域和目标内存区域没有重叠的情况,另一种是有重叠的情况。
// 功能:由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。// 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针void *memmcpy(void *dest , const void *src , size_t count){assert( (dest != NULL) && (src != NULL)); //安全检查assert( count > 0 );char *psrc = (char *) src;char *pdest = (char *) dest;while( count-- )*pdest++ = *psrc++;return dest;}
// 功能:由src所指内存区域复制count个字节到dest所指内存区域。// 说明:src和dest所指内存区域可以重叠,但复制后dest内容会被更改。函数返回指向dest的指针void *memcpy(void *dest , const void *src , size_t count){assert( (dest != NULL) && (src != NULL)); //安全检查assert( count > 0 );char *psrc = (char *) src; //可以保持src里面的值不变,否则后面的自增会改变里面存放的值char *pdest = (char *) dest;//检查是否有重叠问题if( pdest < psrc ){//正向拷贝while( count-- )*pdest++ = *psrc++;}else if( psrc < pdest ){//反向拷贝psrc = psrc + count - 1;pdest = pdest + count - 1;while( count-- )*pdest-- = *psrc--;}return dest;}
Reference:
http://blog.csdn.net/linuxlinuxlinuxlinux/article/details/9498685
http://blog.csdn.net/wanwenweifly4/article/details/6409877
0 0
- 内存拷贝和字符串拷贝
- 字符串拷贝和内存拷贝函数
- 字符串拷贝和内存拷贝函数
- 字符串拷贝和内存拷贝函数
- 字符串拷贝和内存拷贝函数
- 字符串拷贝和内存拷贝函数
- 字符串拷贝和内存拷贝函数
- memcpy内存拷贝函数memcpy和字符串拷贝函数strcpy
- 拷贝函数和内存操作拷贝
- 【字符串】字符串拷贝和长度
- C中字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现
- C语言中的字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现
- C实现内存拷贝以及字符串拷贝函数
- 字符串拷贝与内存拷贝的区别 c语言--memcpy()
- 内存拷贝和对齐读取
- 内存拷贝
- 内存拷贝
- 内存拷贝
- 字符串指针与字符数组的区别(一)--字符串常量的值不能改
- 如何修改远程桌面的端口号
- 数据结构和算法系列 - FP-Tree算法的实现
- 移动终端基带芯片的基本架构介绍之二(移动终端中的基带芯片)
- c++中构造函数初始化的方法以及主要区别
- 内存拷贝和字符串拷贝
- hanoop的helloworld——WordCount解读
- 重新认识C语言
- nginx-lua-fastdfs-GraphicsMagick整合
- Google Java编程风格指南中文版
- Fusion 360 API 入门在线课程
- Java 泛型
- DAX Tabular Calculate,Filter,Value和All
- 排序 - 归并排序