模拟实现字符串相关函数

news2025/1/31 11:28:51

上篇的延续

assert

#include <stdio.h>
#include <string.h>
#include <assert.h>
void my_strcpy(char* dest, char* src)
{


	assert(src!=NULL);//断言  满足某个条件 不允许发生什么事情的时候用断言
	assert(dest!=NULL);
	while (*dest++ = *src++)//非0为真 0为假  传到\0  他的ascll码值为0所以为假
	{

		;

	}
}
int main()
{
		char arr1[20] = "xxxxxxxxx";
		char arr2[] = "hello";
		//strcpy(arr1, arr2);//拷贝包含\0
		my_strcpy(arr1, arr2);
		printf("%s", arr1);//打印结果为hello因为字符串结束标志为\0


		return 0;
}

在这里插入图片描述

const

**如果将while (*dest++ = *src++)
写成while (src++ = dest++)程序运行结果报错 因为arr1的内容太多

在这里插入图片描述
拷贝反了 那我们怎么发现这样的错误 如下加一个const
在这里插入图片描述


const另外用法

const就是让那个值不可被修改,任何修改的都会报错

int main()
{
/*	int num = 20;
	int* p = &num;
	*p = 20;
	printf("%d", num);*///输出结果为20





	//int const num = 20;
	//num = 20;//err
	//int* p = &num;
	//*p = 20;
	//printf("%d", num);//输出结果还是为20 但是加一个num=20会报错



	int num = 20;
	const int* p = &num;
	*p = 20;
	printf("%d", num);//这样就可以了
	return 0;
}

const修饰指针

	int num = 20;
	const int* p = &num;
	*p = 20;如果放在*左边 修饰*p 表示指针只想内容,是不能通过指针来改变的
	printf("%d", num);//这样就可以了
	return 0;

如果放在左边 修饰p 表示指针只想内容,是不能通过指针来改变的,但是指针变量本身可以修改 如下p

在这里插入图片描述


const放在*的右边如下 正好调换
在这里插入图片描述
**如果放在*右边 修饰p 表示指针变量不能被改变,但是指针指向内容可以改变 **

**如果int const * const p=&m 两个都不行了,
*p=0//err
p=&n//err **


**strcpy这个库函数 其实返回的是目标空间的起始地址 所以msdn里返回值是char
**

在这里插入图片描述

其实这样写不行 因为跟上面while冲突 怎么写如下
在这里插入图片描述
因为函数有返回值 char* 所以可以把返回值放到参数部分1 链式访问如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文搞懂Vue2源码实现原理~ 手写Vue2系列~

Iterator&#xff08;遍历器&#xff09;的概念 JavaScript 原有的表示“集合”的数据结构&#xff0c;主要是数组&#xff08;Array&#xff09;和对象&#xff08;Object&#xff09;&#xff0c;ES6 又添加了Map和Set。这样就有了四种数据集合&#xff0c;用户还可以组合使…

KEIL调试正在运行的程序

问题现象 有时程序跑着跑着就飞了&#xff0c;但此时却没有接仿真器&#xff0c;不能停下来看运行状态。如果重新启动调试&#xff0c;会破坏现场。有没有办法attach到应用程序上调试呢&#xff1f; 答案是肯定的。 解决措施 在调试选项中&#xff0c;取消以下选择项 Option…

vue使用docker+node+nginx+linux自动化部署

假定你已经有一个vue项目了&#xff0c;并且已经用github进行管理了&#xff0c; 假定你还有一台免费的linux服务器&#xff0c;想用自动化部署的方式解放双手&#xff0c; 假定你已经了解dockerhub使用&#xff0c;想玩转docker容器&#xff1a;docker构建vue项目镜像并发布…

【QT 5 学习笔记-学习绘图相关+画图形图片等+绘图设备+基础学习(2)】

【QT 5 学习笔记-学习绘图相关画图形图片等绘图设备基础学习&#xff08;2&#xff09;】1、说明2、实验环境3、参照连接4、自己的学习与理解5、学习与实践代码&#xff08;1&#xff09;移动图片测试实验&#xff08;1&#xff09;继续之前的工程&#xff08;2&#xff09;引入…

不知道变年轻特效软件有哪些?这些有趣的app建议收藏

现在刷短视频几乎已经成为我们消遣时间的主要项目之一&#xff0c;因为里面涵盖了多种方面的内容&#xff0c;例如情景短剧、知识点讲解、酷炫的卡点视频、有趣的照片特效等等&#xff0c;能满足不同人群的喜好。 而最近变年轻的特效再次流行起来&#xff0c;你们是不是跟我一样…

K_A09_008 基于 STM32等单片机驱动ES08A SG90舵机按键控制正反转

目录 一、资源说明 二、基本参数 参数 型号&#xff1a;SG90 型号&#xff1a;ES08A 引脚说明 三、驱动说明 SG90舵机 ES08A 舵机 对应程序: 四、部分代码说明 接线说明 STC89C52RCES08A SG90舵机 STM32F103C8T6ES08A SG90舵机 五、基础知识学习与相关资料下载 六、视频…

AI遮天传 DL-深度学习在自然语言中的应用

本文简要介绍一些深度学习在自然语言应用的基本任务&#xff0c;词表示&#xff0c;文本翻译和机器翻译。 一、典型任务 词性标注和句法分析问答和对话系统文本/文档分类情感分析和观点挖掘机器翻译文本生成......1.1 词性标注和句法分析 词性(POS)标注即对句子里的每个词给出…

WPF入门第二篇 MVVM与Binding

MVVM与Binding MVVM&#xff0c;即Model-View-ViewModel的首字母缩写&#xff0c;在这种开发模式下常用binding来对View和ViewModel进行绑定。 添加三个文件夹&#xff0c;分别命名为Models、Views、ViewModels。 在Model文件夹中&#xff0c;添加Student类&#xff0c;并将…

Java学到什么程度可以找工作?这10点赶紧自查!

最近收到了不少私信&#xff0c;询问Java学到什么程度可以找工作。 我也去问了几个同组大佬的想法&#xff0c;总结了10点&#xff0c;大家可以对照自查一下&#xff0c;看看你都做到了吗&#xff1f; 基本技能自查 1、Java SE基础 推荐学习Java8&#xff0c;这依旧是个有代表…

【2023最新】腾讯云注册域名及服务器使用宝塔绑定域名教程

1 在腾讯云注册域名 在官网&#xff1a;https://buy.cloud.tencent.com/domain&#xff0c;注册想要的域名&#xff0c;需要认证信息模板 注册好以后&#xff0c;在右上角输入框&#xff0c;输入域名&#xff0c;查找并进入到域名控制台 在域名控制台&#xff0c;添加记录&…

基础算法系列之排序算法(一)[快速排序,归并排序,二分查找]

文章目录前言快速排序关键点实现选角排序重复实现稳定性分析记忆模板归并排序关键点实现二分查找总结前言 先来一波预热&#xff0c;本次寒假将要更新的博文系列为&#xff1a;基础算法部分&#xff0c;最新前言论文研读&#xff08;不包含论文复现-耗时太长&#xff09;&…

day21【代码随想录】二叉树的层序遍历、二叉树的层序遍历|| 、二叉树的层平均值 、二叉树的锯齿形层序遍历 、二叉树的右视图 、N叉树的层序遍历

文章目录前言一、二叉树的层序遍历&#xff08;力扣102&#xff09;二、二叉树的层序遍历||&#xff08;力扣107&#xff09;三、二叉树的层平均值&#xff08;力扣637&#xff09;四、二叉树的锯齿形层序遍历&#xff08;力扣103&#xff09;五、二叉树的右视图&#xff08;力…

吃透Chisel语言.39.Chisel实战之单周期RISC-V处理器实现(一)——需求分析和初步设计

Chisel实战之单周期RISC-V处理器实现&#xff08;一&#xff09;——需求分析和初步设计 需求分析 首先明确我们要做的是什么&#xff0c;这个在标题里面已经说明了&#xff0c;我们要做的是一个单周期RISC-V处理器。 但光是个短语不足以支撑我们开展项目&#xff0c;我们需…

大数据学习:shell基础(3)

文章目录history命令参数说明任务一&#xff1a;查看历史操作记录任务二&#xff1a;查看最近10条历史命令任务三&#xff1a;查看最开始10条历史命令任务四&#xff1a;曾多少次使用vim编辑文本文件&#xff1f;任务五&#xff1a;执行历史第5条命令任务六&#xff1a;执行上一…

【深度学习】李宏毅2021/2022春深度学习课程笔记 - Recurrent Neural NetWork(RNN)

文章目录一、Slot Filling二、Recurrent Neural NetWork&#xff08;RNN&#xff09;三、Bidirectional RNN&#xff08;双向RNN&#xff09;四、Long Short Term Memory&#xff08;LSTM&#xff09;五、Learning Target六、RNN 很难 Train七、Helpful Techniques7.1 LSTM7.2 …

CSDN竞赛14期·12月11日考试

CSDN竞赛14期12月11日考试 1、题目名称&#xff1a;字符串全排列 // 请关闭中文输入法&#xff0c;用英文的字母和标点符号。 // 如果你想运行系统测试用例&#xff0c;请点击【执行代码】按钮&#xff0c;如果你想提交作答结果&#xff0c;请点击【提交】按钮&#xff0c; //…

半入耳式蓝牙耳机哪款音质好?音质好的半入耳式蓝牙耳机推荐

对于喜欢听歌的朋友来讲&#xff0c;你只佛会关注到蓝牙耳机的佩戴舒适度&#xff0c;音质清晰这种情况&#xff0c;入耳式的带有耳塞&#xff0c;往往更加佩戴有更好的密闭性&#xff0c;半入耳的不完全进入耳道&#xff0c;佩戴更加舒适&#xff0c;下面整理了几款音质不错的…

[附源码]Python计算机毕业设计非处方药的查询与推荐系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Prometheus+Grafana监控一网打尽

PrometheusGrafana监控一、Prometheus介绍二、监控组件node-exportermysqld-exportercadvisorprometheus三、Grafana 展示平台docker启动配置Data sources导入Dashboard模板Linux主机监控Mysql监控Nginx监控Redis监控PostgreSQL监控Kafka监控ElasticSearch监控一、Prometheus介…

这四类项目经理一定带不好项目

项目经理就一定可以带好项目嘛&#xff1f;&#xff0c;当然不一定 失败的项目不少&#xff0c;除去一些本身就很坑的项目&#xff0c;大多项目失败&#xff0c;都和项目经理的个性有关。 也总结了2组极端特质&#xff1a; 第一&#xff0c;烂好人VS劳模型 第二&#xff0c;马…