面试:C/C++常见库函数实现
1. void *mymemcpy(void *dest, const void* src, size_t n);
内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
void* memcpy(void* dest,void* src,size_t n){
assert(dest != NULL && src != NULL);
if(src < dest && (char*)src + n > dest){
char* pdst = (char*)dest+n-;
char* psrc = (char*)src+n-;
while(n--){
*pdst-- = *psrc--;
}
}else{
char* pdest = (char*)dest;
char* psrc = (char*)src;
while(n--){
*pdest++ = *psrc++;
}
}
return dest;
}
2.void *memset(void *s, int c, size_t n);
void* memset(void* src,int c,size_t n){
assert(src != NULL);
char* psrc = (char*)src;
while(n--){
*psrc++ = (char)c;
}
return src;
}
3. char* strcpy(char* dest,const char* src);
char* strcpy(char* dest,const char* src){
assert(dest != NULL && src != NULL);
size_t n = strlen(src);
if(src < dest && src + n > dest){
char* pdst = dest + n;
*pdst-- = '\0';
src = src + n - ;
while(n--){
*pdst-- = *src--;
}
}else{
char* pdst = dest;
while((*pdst++ = *src++) != );
}
return dest;
}
4. char* mystrncpy(char* dest,char* src,size_t n);
char* strncpy(char* dest,const char* src,size_t n){
assert(dest != NULL && src != NULL);
if(src < dest && src + n > dest){
int m = strlen(src) < n ? strlen(src):n;
char* pdst = dest+m;
*pdst-- = '\0';
src = src + m-;
while(m--){
*pdst-- = *src--;
}
}else{
char* pdst = dest;
size_t i = ;
while(i++ < n && (*pdst++ = *src++) != '\0');
if(*(pdst-) != '\0') *pdst = '\0';
}
return dest;
}
5.char* strcat(char* dest,const char* src)
char* strcat(char* dest,const char* src){
assert(dest != NULL && src != NULL);
char* pdst = dest;
while(*pdst != '\0'){
pdst++;
}
while((*pdst++ = *src++) != '\0');
return dest;
}
6.int strcmp(const char* s1,const char* s2)
int strcmp(const char* s1,const char* s2){
assert(s1 != NULL && s2 != NULL);
while(s1 && s2 && *s1 == *s2){
s1++;
s2++;
}
return *s1 - *s2;
}
7.size_t strlen(const char* s)
size_t strlen(const char* src){
assert(src != NULL);
size_t ret = ;
while(*src++ != '\0'){
ret++;
}
return ret;
}
面试:C/C++常见库函数实现的更多相关文章
- Android开发面试经——6.常见面试官提问Android题②(更新中...)
版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/fi ...
- Android开发面试经——5.常见面试官提问Android题①
版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客: http://blog.csdn.net/f ...
- Android开发面试经——4.常见Android进阶笔试题(更新中...)
Android开发(29) 版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...
- Android开发面试经——3.常见Java基础笔试题
Android开发(29) 版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...
- Android开发面试经——2.常见Android基础笔试题
标签: androidAndroid基础Android面试题Android笔试题 2015-03-12 15:04 3361人阅读 评论(3) 收藏 举报 分类: Android开发(29) 版 ...
- http协议详解及htt面试题目,常见的http状态码
http协议详解及htt面试题目,常见的http状态码 HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. HTTP ...
- (转)(HR面试)最常见的面试问题和技巧性答复
(HR面试)最常见的面试问题和技巧性答复 1.请你自我介绍一下你自己? 回答提示:一般人回答这个问题过于平常,只说姓名.年龄.爱好.工作经验,这些在简历上都有.其实,企业最希望知道的是求职者能否胜任工 ...
- Android开发面试经——1.常见人事面试问题
Android开发(29) 版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 做为程序员,我们都是有梦想的人,有时候当我 ...
- Java求职面试准备之常见算法
最近在求职面试,整理一下常见面试算法: 对TestAlgorithms.java中方法的测试见JunitTestAlgorithms.java(引入了junit4) 1.TestAlgorithms. ...
随机推荐
- Citrus Engine简单Demo
Citrus Engine是一个的开源flash平台(platform,也可以说是卷轴类)游戏引擎,它基于Starling Framework添加了各种物理引擎,3D引擎,动画引擎. Citrus实现 ...
- ADO.NET系列之Command对象
ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 上一篇<ADO.NE ...
- dorado-menu
1.menu控件是一个下拉菜单控件,可以设置数icon(图标),click事件,Dorado事件中都有self和arg两个参数,其中self是当前控件本身 2.menu控件可以和toolBar结合使用 ...
- ASP.NET Core 2 学习笔记(四)依赖注入
ASP.NET Core使用了大量的依赖注入(Dependency Injection, DI),把控制反转(Inversion Of Control, IoC)运用的相当巧妙.DI可算是ASP.NE ...
- S11 day 97 -98天 Luffycity项目
1. 建模 from django.db import models from django.contrib.contenttypes.fields import GenericForeignKey, ...
- CentOS 7 - 安装Windows字体!
1,安装cabextract: 下载地址:http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/cabe ...
- kali Linux 上编译并使用RFID核弹——proxmark3
你还在在Windows下使用proxmark3?弱爆了! 本文作者:i春秋签约作家——冰尘 作为一个标准的日天日地日空气的(单身贵族泰迪)物理黑客Proxmark3这么高大上的东西应该是在键盘敲打声中 ...
- 消息中间件(一)MQ详解及四大MQ比较
一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流 ...
- AQS源码泛读,梳理设计流程(jdk8)
一.AQS介绍 AQS(AbstractQueuedSynchronizer)抽象队列同步器,属于多线程编程的基本工具:JDK对其定义得很详细,并提供了多种常用的工具类(重入锁,读写锁,信号量,Cyc ...
- MiniUi中ComboBox与Autocomplete的区别
ComboBox 下拉选择框与Autocomplete的区别: 1,ComboBox只在页面加载时加载一次,发送一次请求: 2,Autocomplete会根据用户输入的值动态的去发送请求加载数据: