C语言字符串复制函数strcpy()的编写与详解

strcpy,即string copy(字符串复制)的缩写。
原型声明:char *strcpy(char *dest, const char *src);
头文件:#include <string.h>#include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针(返回类型char*)。

不使用C/C++标准库函数,进行字符串复制函数的编写:

#include <stdio.h>
#include <malloc.h>
#include <assert.h>

void stringcpy(char* to, const char* from) {
	assert(to != NULL && from != NULL);
	while (*from != '\0') {
		*to++ = *from++;
	}
	*to = '\0';
}

int main(void) {
	char* t = (char*)malloc(15);
	char* f = (char*)malloc(15);
	stringcpy(f, "abcdefg");
	stringcpy(t, f);
	printf("%s\n", t);
	printf("%c\n", t[0]);
	free(t);
	free(f);
	getchar();
	return 0;
}

运行结果:
在这里插入图片描述
详解:
① assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。

*to++ = *from++先赋值再各自自增。
*p++先执行++再执行*,分三步(*++都是同级运算符,右结合)
(1)先执行p++,因为是后置,先用p
(2)再执行 *p, 取p所指的内容;
(3)最后再让p++,让p的地址加一个单位。
注意:++*p(*p)++都是取p所指对象的值加1。

*to = '\0'补上结束符,否则会乱码,如图。
在这里插入图片描述
char* t = (char*)malloc(15)使用 malloc 向堆动态申请内存;由于 malloc 返回类型为(void*),故用(char*)转换类型;char 为字符型变量,占1字节,此处申请了15字节的内存空间。
注意:若已不再使用,需要用 free 手动释放由 malloc 申请的内存,防止内存泄漏。

sizeof(t)的结果为4,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位),对于32位编译器,char*占4字节。

strlen(t)的结果为7,strlen() 截取'\0'之前的字符串长度,其头文件为<string.h>

getchar()类似于C++中的system("pause"),用于生成运行结果后暂停,方便查看结果,否则运行窗口会一闪而过,输入回车后即可关闭窗口。

参考自《程序员面试宝典(第5版)》

  • 0
    点赞
  • 0
    评论
  • 4
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:创作都市 设计师:CSDN官方博客 返回首页

打赏作者

Alexios.W

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值