最近实习+投简历+琐事弄得自己忙的不行不行的,终于今天可以开始记录一些东西了。。。

1.strlen函数的实现

 int strlen(const char *str){
assert(str!=NULL);
int len=;
while(*(str++) != '\0'){
len++;
}
return len;
}

2.strcmp函数的实现

int strcmp(const char *s, const char *p){
assert(s != NULL && p != NULL);
int ret = ;
while(!(ret = *(unsigned char *)s - *(unsigned char *)p) && *s){
s++;
p++;
}
if(ret > )return ;
if(ret < )return -;
return ret;
}

3.strcat函数的实现

char *strcat(char *dest, const char * src){
assert(dest != NULL && src != NULL);
char *addr = dest;
while(*addr != '\0'){
addr++;
}
while((*addr++ = *src++) != '\0');
return dest;
}

4.strcpy函数的实现

strcpy函数实现可以运用memcpy函数,原因就是memcpy函数实现的时候考虑到了内存重叠的情况,而strcpy函数的一般实现没有考虑到内存重叠的情况。

实现一:

char *strcpy(char *dest, const char *src){
assert(dest != NULL && src != NULL);
char *addr = dest;
while((*dest++ = *src++) != '\0');
return *addr;
}

实现二:

char *strcpy(char *dest, const char *src){
assert(dest != NULL && src != NULL);
char *addr = dest;
memcpy(dest, src, strlen(src)+);
return *addr;
}

5.memcpy函数的实现

memcpy函数实现的时候需要考虑内存重叠的情况。

void *memcpy(void *dest, const void *src, unsigned int count){
assert(dest != NULL && src != NULL);
void *addr = dest;
if(dest <= src || (char *)dest >= (char *)src+count){//这种情况不会发生问题,直接复制就好(画图看看吧!)
while(count--){
*(char *)dest = *(char *)src;
dest = (char *)dest+;
src = (cahr *)src+;
}
}else{//这种情况是src后端的一部分与dest前段的一部分重合,一旦从头开始复制就会将src后端与dest重合的部分覆盖掉,导致信息丢失而出错。
dest = (char *)dest+count-;
src = (char *)src+count-;
while(count--){
*(char *)dest = *(char *)src;
dest = (char *)dest-;
src = (char *)src-;
}
}
return addr;
}

strlen、strcmp、strcat、strcpy、memcpy基础函数的实现的更多相关文章

  1. 面试题:实现strcpy,strlen,strcmp,strcat,memcpy 之c-style字符串

    哪里可以看到c库函数的源码? gnu的c运行库glibc,但是源码的实现却是复杂的,需要考虑效率,stlen源码分析. c-style字符串有个约定,以空字符结尾,即 '\0' . ' }; &quo ...

  2. strlen sizeof strcat strcpy区别

      strlen(p): 能计算出p指向字符串的长度(以当前p的位置开始),不包含终止字符'\0': p可以声明为char* p或者char p[],这两种形式strlen均能正确计算. sizeof ...

  3. strcpy, memcpy, memset函数

    一. strcpy函数 原型声明:char *strcpy(char* dest, const char *src);   头文件:#include <string.h> 和 #inclu ...

  4. strcpy,memcpy,memset函数实现

    strcpy 实现,只能拷贝字符串 char* strcpy(char* des,const char* source) { char* r=des; assert((des != NULL) &am ...

  5. 自己实现字符串操作函数strlen(),strcat(),strcpy(),strcmp()

    1.strlen()函数是求解字符串的有效长度的 1)非递归实现 size_t my_strlen(const char *str) { assert(str != NULL);  //断言,保证指针 ...

  6. 实现字符串函数,strlen(),strcpy(),strcmp(),strcat()

    实现字符串函数,strlen(),strcpy(),strcmp(),strcat() #include<stdio.h> #include<stdlib.h> int my_ ...

  7. strlen strcat strcpy strcmp 自己实现

    strlen strcat strcpy strcmp 自己实现 strlen include <stdio.h> #include <string.h> #include & ...

  8. memcpy的函数

    网新恒天2014校园招聘笔试编程题 已知memcpy的函数为: void* memcpy(void *dest , const void* src , size_t count)其中dest是目的指针 ...

  9. (2.16)Mysql之SQL基础——函数

    (2.16)Mysql之SQL基础——函数 关键词:mysql函数,mysql自定义函数,mysql聚合函数,mysql字符串函数,mysql数值函数 1.自定义函数 -- (1)一般形式 creat ...

随机推荐

  1. gdal读写图像分块处理(精华版)

    一.gdal进行数据操作在安装好gdal后,即可调用gdal库中的函数.(需要包含的头文件:gdal_priv.h)1.打开数据集使用gdal库进行数据(影像)操作的第一步就是打开一个数据集.对于“数 ...

  2. VS2010中添加dll目录

    RT,比如用VS写QT,用qmake生成的项目,需要在项目属性里设置:调试->环境,path=%path%;C:\Qt\4.8.5\bin 这样省的每次都要把一堆dll复制到debug/rele ...

  3. StrPCopy与StrPas功能正好相反,作用是与C语言字符串和Delphi的String相互转化

    StrPCopy = Copies an AnsiString (long string) to a null-terminated string.function StrPCopy(Dest: PA ...

  4. logstash 分析nginx 错误日志

    [root@dr-mysql01 frontend-error]# cat logstash_error.conf input { file { type => "zj_fronten ...

  5. MinGW 使用 msvcr90.dll

    MinGW 编译出来的程序总是使用 VC6 的 msvcrt.dll ,VC8,9,10有很多新的API(仅限于c runtime),想使用怎么办? 比如:boost 对 MinGW 最低要求就是 m ...

  6. GIS 相关知识扫盲

    1.什么是GIS GIS:地理信息系统,它是一种特定的十分重要的空间信息系统.它是在计算机硬.软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集.储存.管理.运算.分析 ...

  7. linux底半部机制在视频采集驱动中的应用

    最近在做一个arm+linux平台的视频驱动.本来这个驱动应该是做板子的第三方提供的,结果对方软件实力很差,自己做不了这个东西,外包给了一个暑期兼职的在读博士.学生嘛,只做过实验,没做过产品,给出的东 ...

  8. K-近邻算法python实现

    内容主要来源于机器学习实战这本书.加上自己的理解. 1.KNN算法的简单描写叙述 K近期邻(k-Nearest Neighbor.KNN)分类算法能够说是最简单的机器学习算法了. 它採用測量不同特征值 ...

  9. Leetcode:best_time_to_buy_and_sell_stock_II题解

    一.题目 如果你有一个数组,它的第i个元素是一个股票在一天的价格. 设计一个算法,找出最大的利润. 二.分析 假设当前值高于买入值,那么就卖出,同一时候买入今天的股票,并获利.假设当前值低于买入值,那 ...

  10. -bash: ulimit: max user processes: cannot modify limit: Operation not permitted

    安装oracle时候在创建oracle用户后,切换oracle用户时,报如下错 [root@localhost ~]# su - oracle-bash: ulimit: max user proce ...