常考的函数有下面三个,memset,memcpy,memmove,一定要记住三个函数的函数原型,熟记返回值类型和参数类型,当然也不能忘记参数检查

 

  • memset
 #include<iostream>
#include<cassert>
using namespace std; void *my_memset(void *s, int ch, size_t n)
{
assert(s);
char *ptr = (char *)s;
for (size_t i = ; i < n; ++i)
{
*(ptr++) = ch;
}
return s;
} int main()
{
char s[];
my_memset(s,'a',);
return ;
}

一定要先把void*的指针强制转化成char *再进行操作,不然拿void*是没办法的

  • memcpy
 #include<cassert>
using namespace std; void *my_memcpy(void *dest, void *src, size_t n)
{
assert(dest && src);
char *pdest = (char *)dest;
char *psrc = (char *)src;
for (size_t i = ; i < n; ++i)
{
*(pdest++) = *(psrc++);
}
return dest;
} int main()
{
return ;
}

memcpy是没有考虑内存覆盖问题的,所以在进行自身拷贝的时候推荐使用memmove,VS2015的memcpy好像已经结局内存覆盖的问题了,但是为了跨平台的安全考虑,使用memmove是绝对没问题的

  • memmove
 #include<iostream>
#include<cassert>
using namespace std; void *my_memcpy(void *dest, void *src, size_t n)
{
assert(dest && src);
char *pdest = (char *)dest;
char *psrc = (char *)src;
for (size_t i = ; i < n; ++i)
{
*(pdest++) = *(psrc++);
}
return dest;
}
void *my_memmove(void *dest, void *src, size_t count)
{
assert(dest && src);
char *pdest = (char *)dest;
char *psrc = (char *)src;
if (psrc + count > pdest && pdst > psrc)//之前是这样的psrc + count > pdest,条件不完全,虽然没啥错就是了
{
for (int i = count - ; i >= ; i--)
{
*(pdest + i) = *(psrc + i);
}
}
else
{
for (int i = ; i < count; ++i)
{
*(pdest + i) = *(psrc + i);
}
}
return dest;
} int main()
{
char s1[] = "hello world";
char s2[] = "hello world";
my_memmove(s1+,s1,);
my_memcpy(s2+, s2 , );
return ;
}

面试基础(二)-mem函数的更多相关文章

  1. Python基础(二)自定义函数

    1.判断字符串,内容是否为数字 我们用python:xlrd读Excel内容时,本来只是输入的整数字,经常读出来的是float类型 我们需要自动转成整型,意思就是说,读出来的和我们输入的一样,但是,我 ...

  2. 快速掌握JavaScript面试基础知识(二)

    译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...

  3. iOS 面试基础题目

    转载: iOS 面试基础题目 题目来自博客:面试百度的记录,有些问题我能回答一下,不能回答的或有更好的回答我放个相关链接供参考. 1面 Objective C runtime library:Obje ...

  4. 快速掌握JavaScript面试基础知识(三)

    译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...

  5. jdbc基础 (二) 通过properties配置文件连接数据库

    csdn博文地址:jdbc基础 (二) 通过properties配置文件连接数据库 上一篇描述了对mysql数据库的简单操作,下面来看一下开发中应该如何灵活应用. 因为jdbc对数据库的驱动加载.连接 ...

  6. Python 基础三 文件 函数

    今天回顾一下之前学的文件操作相关知识点,对于文件的操作,主要有一下几部分构成: 一.文件的基础知识 1.文件操作的基本流程 文件操作其实可以分成三大部分: 1.打开文件,获取文件句柄并赋予一个变量 2 ...

  7. python基础——内置函数

    python基础--内置函数  一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...

  8. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  9. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  10. Ruby语法基础(二)

    Ruby语法基础(二) 继续ruby的学习,这次主要把目光放到运算符,条件判断,循环,方法,以及其他ruby特有的基本概念上 运算符 算术运算符:+,-,/,%,**,值的注意的是,ruby中一切皆为 ...

随机推荐

  1. Python3之Memcache使用

    简介 Memcached是一个高性能的分布式内存对象缓存系统,用于动态WEB应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态,数据库网站的速度.Memcached ...

  2. 按钮重复点击问题 UIbutton

    .h #import <UIKit/UIKit.h> #import <objc/runtime.h> @interface UIControl (XY) @property ...

  3. python安装环境配置、python模块添加、sublime text编辑器配置

    前提: 本文讲述的是  windows环境 python相应的安装配置. 进入官网找安装包,官网地址如下:https://www.python.org/downloads/ 找到相应2.7.x或3.x ...

  4. R语言批量生成变量(变量名中含有参数)

    我们经常会需要生成这样一类的变量,比如a1,a2,a3...... 这时候我们需要用到这两个函数:get()和assign() get()用法 get()函数只是在环境中搜索该变量名的变量,如果该变量 ...

  5. 使用Git向GitHub上上传代码

    参考:http://www.cnblogs.com/yxhblogs/p/6130995.html 如果遇到[git无法pull仓库refusing to merge unrelated histor ...

  6. CF248E Piglet's Birthday(概率dp)

    题面 luogu CodeForces 题解 \(orz\) yyb 转移蜜罐其实是吓唬人的...... 转移的蜜罐都是尝试过的,所有只关心当前架子上的蜜罐数 设\(f[i][j]\)表示第i个货架有 ...

  7. oracle三种连接身份

    登录oracle数据库有三种连接身份   sysdba:数据库管理员,sysyoper:数据库操作员,normal:普通用户. "sysdba" 即数据库管理员 权限包括:   打 ...

  8. 小a与“204”------数列、排序

    链接:https://ac.nowcoder.com/acm/contest/317/B来源:牛客网 小a非常喜欢204204这个数字,因为′a′+′k′=204′a′+′k′=204. 现在他有一个 ...

  9. java.lang.ref.Reference<T>

    //看之前先要知道java里面的四种引用.package com.zby.ref; import sun.misc.Cleaner; /** * 引用对象的抽象基础类.这个类定义了所有引用对象的公共操 ...

  10. 剑指offer——面试题10:斐波那契数列

    个人答案: #include"iostream" #include"stdio.h" #include"string.h" using na ...