很多公司的面试官在面试程序员的时候,要求应聘者写出库函数strcpy()的工作方式或者叫实现,很多人以为这个题目很简单,实则不然,别看这么一个小小的函数,它可以从三个方面来考查:

(1)编程风格

(2)出错处理

(3)算法复杂度分析(用于提高性能)

最好的写法如下:

代码如下:

 #include <stdio.h>
#include <stdlib.h>
#include <assert.h> //链式访问
char * my_strcpy(char *dest, const char *src)
{//将源字符串加const,表明其为输入参数,起到相应的保护作用
assert(src != NULL&&dest != NULL);//对源地址和目的地址加非0断言
char *ret = dest;
while ((*dest++ = *src++))
;
return ret;//引用返回地址,方便链式操作!!
} int main()
{
char *p = "bit-tech";
char arr[];
//strcpy(arr,p);
printf("%s\n", my_strcpy(arr, p));
system("pause");
return ;
}

同样写出strlen函数:

 int strlen( const char *str ) //输入参数const

 {
 assert( strt != NULL ); //断言字符串地址非0
 int len;
 while( (*str++) != '' )
 {
  len++;
 }
 return len;
}

上面是一篇博客上的两种写法:但都用到了一个人函数

  assert函数用于判断可能出的错误是否发生,如果发生程序终止执行;不发生着正常执行。函数在有可能出错的地方测试一个条件。当条件成立时,表示发生错误。

  语法:void asscrt(int test);

  asserr()函数的语法参数说明如下:

    参数test为测试表达式。

    asserr()函数没有返回值。

C语言学习笔记 (010) - 编写strcpy函数的更多相关文章

  1. 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项

    博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...

  2. C语言学习笔记---好用的函数memcpy与memset

    这个主要用于我个人的学习笔记,便于以后查询,顺便分享给大家. 想必在用C的时候难免会与数组,指针,内存这几样东西打交道,先以数组为例,例如有一个数组int a[5] = {1, 2, 3, 4, 5} ...

  3. c语言学习笔记(8)——函数

    学完c语言的函数可以理解面向过程的语言 函数是c语言的重点 一.为什么需要函数? 1.避免了重复性操作 2.有利于程序的模块化(每一个功能可以用不同函数去实现) 二.什么叫做函数? 逻辑上:能够完成特 ...

  4. TypeScript语言学习笔记(3)函数,泛型

    函数 // 具名函数和匿名函数 // Named function function add(x, y) { return x + y; } // Anonymous function let myA ...

  5. 【Go语言学习笔记】Go的函数

    函数还是这几块: 参数 返回值 作用域 执行顺序 参数和返回值 func FuncName(/*参数列表*/) (o1 type1, o2 type2/*返回类型*/) { //函数体 return ...

  6. Go语言学习笔记七: 函数

    Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

  7. Hadoop学习笔记(5) ——编写HelloWorld(2)

    Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...

  8. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  9. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

随机推荐

  1. angularJs中$controller的使用

    $controller的使用 参考:https://stackoverflow.com/questions/27866620/can-someone-provide-a-use-case-for-th ...

  2. GIT 如何在不提交Commit的情况下切换分支

    最近遇到一个问题,事情是这样子的,刚刚接到客户说他的项目有问题,于是就打开本地的源码查看经过排查确定了问题,于是就开始进行修正工作 将问题修复好准备提交到git的时候发现当前的分支是不对的,但问题是我 ...

  3. Flask学习笔记

    1.路由用"/"结尾. 比如@app.route("/about/"),可以匹配/about和/about/,而@app.route("/about& ...

  4. 【Python】用geopy查两经纬度间的距离

    代码: from geopy.distance import vincenty from geopy.distance import great_circle 天安门 = (39.90733345, ...

  5. spring 判断非空提示断言

    org.springframework.util.Assert Assert.notNull(object, "Bean object must not be null");

  6. angularjs中的验证input输入框只能输入数字和小数点

    把js的验证方法改成angular可使用的方法 AngularJS文件的写法: $scope.clearNoNum = function(obj,attr){ //先把非数字的都替换掉,除了数字和.o ...

  7. LintCode: Flatten Binary Tree to Linked List

    C++ Traverse /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, ...

  8. typescript - 前言介绍

    众所周知,JavaScript是弱语言(子承父业都表达不了),因此比较大的企业考虑到可维护性以及安全性来说,都不用它开发,因此Typescript诞生了,它并不是为了替换JavaScript而诞生的, ...

  9. 005-Go 操作PostgreSQL数据库

    package main import( "fmt" "database/sql" _ "github.com/lib/pq" " ...

  10. 〖Linux〗在tmux同时使用bash和zsh

    个人有两份tmux配置文件: ~/.tmux.conf # 使用zsh,主要是日常使用,zsh太好使用了 ~/.tmux.conf.bash # 使用bash,主要是Android编译使用 按照tmu ...