| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 小小拷贝-strcpy洒洒水啦 -> 正文阅读 |
|
[C++知识库]小小拷贝-strcpy洒洒水啦 |
今日目标
上代码 调用strcpy库函数要先引头文件 strcpy(arr2,arr1) 注意点:1.括号里面的是要放地址的,或者是指针 2.逗号两边也有区别,左边如果比作是员工,那右边就是发工资的老板了,我就 是这么记忆的,感觉还不错!
情况有变啊, 兄弟们。 打印出来的和预期不一样啊!为什么arr2后面的几个xxx也打印出来啊??我是不想打印出来的啊。 好问题!那让我们来一探究竟。那我们这里需要运用到调式的功底了。 我们下面一步一步来: 为什么还是会打印后面的xxx呢?那问题应该出现在这前面,大概就是应该没有遇到'\0'不然遇到为什么还要打印后面的xxx呢,对吧。 继续分析 f10、f11调试 没问题,数组名就是首元素地址 第一次赋值也没错 其实到最后的赋值都没有错,这里我就跳过; 到最后一步arr1里面的东西赋值完了,准备到'\0'赋值了 如果是这里出错,没有赋值到位,那打印的时候就看不见'\0',也就出现刚刚那个xxx都打印出来了; 我们来看是不是我们想的那样,没有赋值成功, 果然,我们看,当我str++指着\0这个位置,*str='\0'的时候,我继续按f10走,程序来到while循环进行判断,但是判断条件为假,跳出循环,没有执行赋值的步骤,就来到了当前图片这个位置。 那答案不就出来了么?很简单我没有成功把\0赋值出去,导致在打印的时候打印如此情况; 很粗心 哈哈哈解决了 问题找到了根源就很简单解决了,就是跳出来while循环,没有赋值。那我再跳出循环的后面继续赋值不就完事了吗,而且当前scr指到的对象就是\0,解引用后直接赋值就完事了。
理解一下画出来的,后置++,先用再+。 那我放在后面,它解它的解引用,解完之后再++;没毛病
能不能继续优化了(下面这段代码让我想我也是想不出来的,但是看到这个代码,你肯定可以看懂) ?就赋值就完事儿了,while只要非零就会继续循环,当我\0赋给dest的时候,\0的ASCII码值就是0,这时候自然跳出循环。 你感觉这句就完了吗,那肯定不可能的哈哈哈哈。 我们应该要明白这里都是运用到了指针,指针如果你有一个明确的地址的话,解引用时没什么毛病的,但是如果你不知道传过来的指针是明确的或者说是一个空指针,解引用一个空指针就会出现问题了。 虽然说,在编译的时候不会报错。 ?但是你在执行代码的时候就会出现以下的这种情况: 所以要避免这种情况,我们这里有引进了一个函数 assert() 断言 如果你断言的是真的,则继续执行 就在在你断言时,如果是假的,则会提示你,会告诉你错在哪,这是对程序员最大的帮助了,想想当你写了很多行代码,出现错误,想要排查,都会很难找。 ? 很清晰,会告诉你具体出错在哪一行;我不希望它发生,但是发生了会把出错位置报给我。 断言不只是只能用在指针,比如说,你不想a!=5,当等于5了会报错,所以说只要一个条件不满足了就会报错,提示你在哪错了。
你要知道我们写的strcpy和库函数里面的不一样,我们来看看库函数里面怎么定义的。 ? 我们自己写的 ? 探究一下 我们不小先把strcpy括号里面的关系弄混 ? 报错了:运行时检查失败#2 -变量'arr1'周围的堆栈已损坏,但是他还是拷贝出来了; 如果我们加上const ? 我们发现,他会在写完代码之后就会提醒我们出错了。,而且在编译的时候就根本通过不了; 其实我之前也说过,strcpy(员工,老板),这里面右边可以说是不变的量,把自己的东西赋值给了左边,左边是要发生改变的。这里用到const这个来修饰*src,让它变成了常变量,以至于如果写错了,导致想改变常变量,这就是不可能的了。也规避了自己写完之后才发觉错误,然后慢慢改。
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:32:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |