strcpy函数实现代码带有完整例程

不使用系统提供的库函数实现strcpy函数的功能

#include <stdio.h>
#include<assert.h>
//声明strCopy函数,在一个函数声明中,const 可以修饰形参,
//表明它是一个输入参数,在函数内部不能改变其值
char *strCopy(char *strDEST, const char *strSrc);
                                            
void main()
{	
	char str1[50] = "Welcome to ..........";
	char str2[50] = "www.blogtextbook.com";
	printf("str1=%s\n\n", strCopy(str1, str2));	
    return;
}

char *strCopy(char *strDEST, const char *strSrc)//定义strCopy函数
{
       //断言原地址以及目的地址 
	assert((strDEST != NULL) && (strSrc != NULL));

	char *address = strDEST;//返回到目的地址处

	//*、++同级运算符、自右向左(单目运算符)
	while ((*strDEST++ = *strSrc++) != '\0'); 

	//为了实现链式操作,将目的地址返回
	return address;                           
}

由于使用插件保护了页面,不能复制,代码存百度云了,点击此处下载代码例程!!!

该代码已经编译测试过,完整通过,代码都能看懂,接下来我在补充另外两点知识:运算符优先级、const用法


 1、运算符优先级

接下来的优先级别由高到低:

  1. 初等运算符:()、[]、–>、.
  2. 单目运算符:!、~、++、–、-、*(指针)、&、sizeof(长度运算符)     顺序:自右向左
  3. 算术运算符:*(乘法)、/、%、+、-
  4. 逻辑运算符:&&、||(不包括“!”)
  5. 条件运算符::?:
  6. 赋值运算符:=、+=、/=……..                                                             顺序:自右向左
  7. 逗号运算符:(exp1,exp2)先一后二,结果为2

需要注意得就是‘!’属于单目运算符,不属于逻辑运算符,除了单目以及赋值运算符的方向是自右向左,其余的运算符方向是自左向右。比如strcpy函数中的while语句有“*”以及“++”符号,那他执行方向就是按照自右向左,所以strSrc先与右边的“++”结合在与左边的“*”结合。运算符就到这也不难,但是需要记。再我的另一篇文章中有关于sizeof的用法,可以去看一下,我提一点,sizeof是运算符不是函数,sizeof可以直接加数据类型,比如sizeof(int);,函数是没这种用法的。


2、const的用法

const是C中的关键字,我从网上收集了const的用法,如下:

  1. 欲阻止一个变量被改变,可以用const关键字,不过通常需要对他进行初始化设置。
  2. 对于指针来说,可以指定指针本身为const,也可以指定指针指向的数据为const,或者二者同时指定为const。
  3. 在一个函数声明中,const可以表示形参,表明他是一个输入参数,在函数内部不能改变其值
  4. 对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。
  5. 对于类的成员函数,若指定其为const类型,便表明其是一个常函数,不能修改类的成员变量。

对于其中的第二条用法,再上述的程序声明中设置了strSrc为const类型,就表明他是一个输入参数,


Tags:
2,389 Comments