面试题 实现memmove函数
来源:互联网 发布:直销矩阵制示意图 编辑:程序博客网 时间:2024/05/16 12:00
【题目】
用C语言实现函数void *memmove(void *dest, const void *src, size_t n)。memmove函数的功能死拷贝src所指向内存内容前n个字节到dest所指的地址上。
【例子】
源字符串是hello word!,要求目标字符串也是helloword!。
【分析】
作为公用库函数,请注意安全检查,注意处理内存区重合的情况。代码本身比较简单。
【代码】
#include <iostream>#include <cstdio>#include <cstring>void * my_memmove( void * const dest, const char * const src, size_t n ){ // check parameters if( 0 == n ) { return NULL; } if( NULL == dest || NULL == src ) { return NULL; } char * psrc = (char *)src; char * pdest = (char *)dest; if( pdest <= psrc || pdest > psrc + n ) { std::cout << "forward overlapping" << std::endl; // copy forward direction for( size_t i = 0; i < n; i++ ) { *pdest = *psrc; pdest++; psrc++; } } else { std::cout << "backward overlapping" << std::endl; // copy backward direction pdest = pdest + n; psrc = psrc + n; for( size_t i = 0; i< n; i++ ) { *pdest = *psrc; pdest--; psrc--; } } return dest;}int main( int argc, char ** argv ){ char *src = new char[100]; sprintf( src, "%s", "hello world!" ); char * dest = new char[100]; memset( dest, 0, 100*sizeof(char ) ); std::cout << src << std::endl; char * result = (char*)my_memmove( dest, src, strlen(src) ); std::cout << result << std::endl; delete src; delete dest; return 0;}
0 0
- 面试题 实现memmove函数
- 面试题:写一个memmove函数
- 面试题之实现系统函数系列一:实现memmove函数
- 【C语言】【面试题】【笔试题】模拟实现数据库中memmove函数
- 百度面试题——用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- 百度面试题——用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- memmove函数的实现
- memmove函数实现
- 实现memmove函数
- 实现memmove函数
- 模拟实现memmove函数
- memmove函数的实现
- memmove函数实现2
- memmove函数的实现
- 模拟实现memmove函数。
- memmove函数实现
- 模拟实现memmove函数
- 实现memmove函数
- 关于SVN提交强制加入注释
- PL/SQL个人学习笔记
- Webservice理解:Socket与Webservice的区别
- servlet简单配置详解
- lunix性能查看简单命令
- 面试题 实现memmove函数
- 安装numpy、nltk问题汇总
- wpf中datagrid 控件 隐藏表头方法
- xml功能数据格式
- 黑马程序员——java.lang.Runtime
- 函数
- 关于实现memcpy和memmove两个库函数的一点体会
- 【瞎搞】HDU 4961 Boring Sum
- Shell脚本调试技术