C/C++自实现的函数(memset, memcpy, atoi)
函数原型:
void * memset ( void * buffer, int c, size_t num );
关于void * 因为任何类型的指针都可以传入memset函数,这也真是体现了内存操作函数的意义,因为他操作的对象仅仅是一片内存,而不论这片内存是什么类型!
void无类型,其实是一种类型上的抽象,它可以转换成任何类型!
void *myMemset(void *s, int ch, size_t n) // point 1: s的类型未知,n代表字节数
{
assert(NULL != s);
void *tmp = s;
while(n --){
*(char *)tmp = (char)ch; //point 2: 将tmp转成char类型占用1个字节来赋值成c
tmp = (char *)tmp + ; // point 3: 每次自增加1个byte
}
return s;
}
函数原型:
void * memcpy(void *dest, const void *src, size_t len);
void *myMemcpy(void *dest, const void *src, size_t n) // ponit1: src声明为const类型 & 指定n个需要cp的字节
{
assert(NULL != dest && NULL != src);
int i = ;
void *tmp = dest;
while(i < n){
*((char *)tmp + i) = *((char *)src + i);
++ i;
}
return dest;
}
函数原型:
int atoi(const char *nptr);
实现过程主要注意:int范围是否合理(用long long 和 int的最大值与最小值(最小值的表示-0)比较),符号的处理,非法字符,正负号。
const int INF_MAX = 0x7fffffff;
const int INF_MIN = 0x80000000;
enum {Invalid = , Valid};
int errno;
void atoiCore(const char *str, bool minus, long long &num)
{
while( '\0' != *str ){
cout<<"str : "<<*str<<endl;
if(*str >= '' && *str <= ''){
num = num * + (*str) - '';
str ++;
if( (minus && -num < INF_MIN) || (!minus && num > INF_MAX)){ //超过int范围
errno = Invalid;
num = ;
return ;
}
}else{ // 非数字字符
errno = Invalid;
num = ;
return ;
}
}
if ( minus )
num = -num;
errno = Valid;
} //负数最小值(-2^31)的补码使用的是 -0的补码 负数最小值的补码使用的是 -0的补码 负数最小值的补码使用的是 -0的补码
int myAtoi(const char* str)
{
assert( NULL != str);
long long num = ; // point 1: 过程可能会溢出 使用long long
errno = Invalid;
if (*str != '\0')// point 2
{
bool minus = false;
if (*str == '+'){
++ str;
}else if(*str == '-'){
++ str;
minus = true;
}
if('\0' != *str){
atoiCore(str, minus, num);
}
}
return (int) num; //保证范围后 返回 int
}
C/C++自实现的函数(memset, memcpy, atoi)的更多相关文章
- 访谈将源代码的函数 strcpy/memcpy/atoi/kmp/quicksort
一.社论 继上一次发表了一片关于參加秋招的学弟学妹们怎样准备找工作的博客之后,反响非常大.顾在此整理一下,以便大家复习.好多源自july的这篇博客,也有非常多是我自己整理的.希望大家可以一遍一遍的写. ...
- c++中内存拷贝函数(C++ memcpy)详解
原型:void*memcpy(void*dest, const void*src,unsigned int count); 功能:由src所指内存区域复制count个字节到dest所指内存区域. 说明 ...
- 【C语言】编写函数实现库函数atoi,把字符串转换成整形
//编写函数实现库函数atoi.把字符串转换成整形 #include <stdio.h> #include <string.h> int my_atoi(const char ...
- 自己实现内存操作函数memset(),memcmp(),memcpy(),memmove()
1.memset()内存设置函数(初始化) void *my_memset(void* dest, int c, size_t count) { assert(dest != NULL); char ...
- memset memcpy函数
memset 函数 1.其头文件为: #include<memory> 或者#include<string> 2.原型 看清是对每个字节,不是其类型 void *mems ...
- <cstring>中常用的两个函数memset()和memcpy()
<cstring>是c++对c中的<string.h>进行了重写,这两个头文件中的函数用法是一样的,所以在用的时候包含哪个头文件都行.下面介绍一下 <cstring> ...
- 41.内存函数实现(memcpy,memset,memmove,memicmp,memchr.memccpy)
memcpy #include <stdio.h> #include <stdlib.h> #include <memory.h> void * mymemcpy( ...
- C的memset,memcpy,strcpy 的区别 及memset memcpy memmove源码
extern void *memcpy(void *dest,void *src,unsigned int count);#include <string.h> 功能:由src所指内存 ...
- 面试必会函数源代码 strcpy/memcpy/atoi/kmp/quicksort
http://blog.csdn.net/liuqiyao_01/article/details/26967813 二.stl模板函数 1.strcpy char * strcpy( char *st ...
随机推荐
- [bzoj1324]Exca王者之剑_最小割
Exca王者之剑 bzoj-1324 题目大意:题目链接. 注释:略. 想法: 最小割经典模型. 所有格子向源点连权值为格子权值的边. 将棋盘黑白染色后白点反转源汇. 如果两个格子相邻那么黑点向白点连 ...
- 使用go语言实现简单的反向代理工具激活IntelliJ和PyCharm,持续更新
最近Jetbrians系列IDE更新至2017.3版本,激活检测机制也变成了动态封禁域名,导致大部分域名激活被屏蔽了,所以找了下资料,根据ilanyu的代码,改了下地址,实现了本地反向代理激活服务器. ...
- Python学习系列之format用法
format是代替%s格式的方法 不需要理会数据类型的问题,在%s方法中的%s只能代替字符串类型 填充方式十分灵活,对其方式十分强大 format填充字符串 通过位置来填充字符串 #format会把参 ...
- Chrom开发者工具详解
Chrome开发者工具不完全指南(一.基础功能篇) http://www.mamicode.com/info-detail-863534.html Chrome开发者工具不完全指南(二.进阶篇) ht ...
- C# .NET 如何批量增加或取消注释
选中一批文本之后 批量增加注释:Ctrl+K Ctrl+C 批量取消注释:Ctrl+K Ctrl+U
- struts1与struts2的差别
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结 ...
- Django打造大型企业官网(五)
4.6.切换轮播图的箭头样式以及显示和隐藏 templates/news/index.html <span class="arrow left-arrow">‹< ...
- TQ2440 学习笔记—— 1、Windows平台下开发工具安装与环境建立
板子:广州天嵌公司的TQ2440,处理器为三星的S3C2440 1.开发工具的安装与环境建立 系统:win7 64位 SecureCRT软件:该软件能够取代Windows中的超级终端,是个非常好的串 ...
- 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3
Introducing Information Architecture 信息架构简介 Chapter 1 Defining Information Architecture 信息架构的意义(我们盖房 ...
- 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数
1.指针数组 数组里面的每一个元素都是指针. 指针数组的案比例如以下: 易犯错误: 2.数组指针 归根结底还是指针,仅仅是取*的时候可以取出一整个数组出来. 数组指针:(一个指针指向了数组.一般 ...