`

几个C库函数的简单实现

阅读更多

1.C 库函数实现

Char * strcpy(char* s1, const char * s2)

{

Char* s=s1;

While (*s1++=*s2++);

return s1;

}

char *strncpy(char *s1, const char *s2, size_t n)

{

Char* s=s1;

While (*s++=*s2++)&&(s1-s<=n);

Return s1;

}

Int strcmp(const char* s1, const char * s2)

{

While (*s1&&*s2&&(*s1++==*s2++));

Return (*--s1)-(*--s2);

}

 
char *strcat(char *s1, const char *s2)

{

Char* s=s1;

For(;*s1;s1++);

while (*s1++=*s2++);

return s1=s;

}

 
Int *strlen(char * s)

{

For(char * s1=s;*s1;s1++);

Return s1-s;

}

 
static const char* strstr(const char* s1, const char* s2)

{

     assert(s2 && s1);

     const char* p=s1, *r=s2;

     while(*p)

     {

          while(*p++==*r++);

          if(!*--r)

               return s1;

          else

          {

               r=s2;

               p=++s1;

          }

     }

     return NULL;

}

Int substrpstn(const char* s1, const char*s2)

{

int pstn=1;

char * p=s1, *q=s2;

while (*p)

{

while (*p++==*q++);

if (*--q)

Return pstn;

Else

{

q=s2;

p=++s1;

i++;

}

}

Return 0;

}

Char* reverse(char* s1)

{

char * p=s1, *q=s1;

While (*q++);

q-=2;

while (p<q)

{

*p=*p+*q;

*q=*p-*q;

*p=*p-*q;

P++;

q++;

}

Return s1;

}

 
Int chkIntgtr(char c)

{

         Return (c>=’0’)&&(c<=’9’)?(c-‘0’):-1;

}

 Void * malloc(int size)

{

Return static_cast<void*>(new char[size]);

}

 

void itoa(int input, char* s)

{

Int i=input;

Char* s1=s, *s2=s;

input=(input>=0)?input:-input;

do

{

*S2++=input%10+’0’;

}while(input/10);

If (i<0)

*s2++=’-’;

s2=’/0’;

s2--;

while(s1<s2)

{

*s1=*s1+*s2;

*s2=*s1-*s2;

*s1++=*s1-*s2--;

}

}

 
 

2. 在一个函数中,如果用数组名做形参,那么编译器会把其退化为一个指针对待(即使函数声明中的形参是数组),所以sizeof结果为4,正好是一个指针的大小。所以我们在f函数中可以写:n++,而在main中m++却报错,就是这个原因,一个是指针,一个是数组,指针是变量可以修改,数组名是常量,不可以修改。

3. 两个指针指向同一数组(字符串)时,高位的指针与低位的指针相减是整数(两指针之间相差的元素个数, 当然指针的类型和数组的类型应一致)

4. 字符指针数组的大小 列数*4。

 

5. 内存操作规则:

【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。

  【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。

  【规则3】避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。

  【规则4】动态内存的申请与释放必须配对,防止内存泄漏。

  【规则5】用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。

分享到:
评论

相关推荐

    c的几个string库函数简单实现

    本文和大家分享c的几个string库函数程序。

    C语言接口与实现--创建可重用软件的技术

    内容提要《C语言接口与实现:创建可重用软件的技术(英文版)》概念清晰、实例详尽,是一本有关设计、实现和有效使用C语言库函数,掌握创建可重用C语言软件模块技术的参考指南。书中提供了大量实例,重在阐述如何用一种...

    你必须知道的495个C语言问题

    1.8 如何在C中实现不透明(抽象)数据类型? 1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 1.10 同一个静态(static)函数或变量的所有声明都必需包含static存储类型...

    你必须知道的495个C语言问题(PDF)

    难道在C语言中一个结构不能包含指向自己的指针吗? . . . . 3 1.7 怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返 回指向字符的指针的函数的指针的数组? . . . . . . . . . . . . . . 3 1.8 函数只定义...

    《你必须知道的495个C语言问题》

    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...

    C语言标准教程第一章 C语言概论

    但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。 当代最优秀的程序设计语言  早期的C语言主要是用于UNIX系统。...

    (谭浩强)c语言学习书

    这几个程序由简到难,表现了C语言源程序在组成结构上的特点。虽然有关内容还未介绍,但可从这些例子中了解到组成一个C源程序的基本部分和书写格式。 【例1.1】 main() { printf("世界,您好!\n"); }  main是...

    线程池实现蚁群算法的简单并行

    里面有几个文档是介绍相关背景,threadpool.h和threadpool.c文件包含了简单线程池的库函数,ant_pthread.c是并行蚁群算法的源代码

    C语言入门经典(第4版)--源代码及课后练习答案

    1.5 剖析一个简单的程序 6 1.5.1 注释 6 1.5.2 预处理指令 7 1.5.3 定义main()函数 7 1.5.4 关键字 8 1.5.5 函数体 8 1.5.6 输出信息 9 1.5.7 参数 10 1.5.8 控制符 10 1.6 用C语言开发程序 12 1.6.1 ...

    C程序设计 第四版 谭浩强 高清扫描版 带完整书签目录 加 学习辅导

    本书的每个例题都按以下几个步骤展开:提出任务—解题思路—编写程序—运行程序—程序分析—有关说明。符合读者认知规律,容易入门与提高。 本书内容先进,体系合理,概念清晰,讲解详尽,降低台阶,分散难点,例题...

    C语言FAQ 常见问题列表

    难道在C语言中一个结构不能包含指向自己的指针吗? o 2.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回指向字符的指针的函数的指针的数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示...

    C语言程序设计标准教程

    scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中,与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件。scanf函数的一般形式为: scanf(“格式控制字符串”,地址表列); 其中,...

    手到擒来--vc小词典2.0

    该软件有以下几个特点: 1&gt; 由于采用了功能强大的SQL查询语言,查询速度快. 2&gt; 轻松实现”即查即现”的模糊查询方式,在输入查询值的同时,记录会自动更新为最相近的记录,性能优越. 3&gt; 查询到的函数不仅有基本的功能...

    c语言编写单片机技巧

    C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,...

    c/C++面试题大全--96页

     (3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:  2分 void strcpy( char *strDest, char *strSrc ) {  while( (*strDest++ = * strSrc++) != ‘\0’ );...

    C程序范例宝典(基础代码详解)

    本书全面介绍了应用C语言进行开发的各种技术和技巧,全书共分12章,内容包括基础知识、指针、数据结构、算法、数学应用、文件操作、库函数应用、图形图像、系统调用、加解密与安全性、游戏、综合应用等。全书共提供...

Global site tag (gtag.js) - Google Analytics