2024-2025-1 20241403《计算机基础与程序设计》第十二周学习总结

news/2024/12/14 20:54:52/文章来源:https://www.cnblogs.com/chenqiqi/p/18607191

2024-2025-1 20241403《计算机基础与程序设计》第十二周学习总结

作业信息

这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)
这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)
这个作业的目标 指针与一维,二维数组的关系,指针数组及其应用,动态数组,缓冲区溢出攻击
作业正文 https://www.cnblogs.com/chenqiqi/p/18607191

教材学习内容总结

一、指针与一维、二维数组的关系
1.二维数组在内存中的存储:二维数组在内存中是按行顺序连续存储的,类似于将二维数组“平铺”开来。
2.指针声明与初始化:可以声明一个指向包含特定数量元素的数组的指针,例如int ()[5],表示指向包含5个int元素的数组的指针。利用数组名作为右值时会转换为指向首行元素的指针这一特性进行赋值。
3.复杂指针表达式分析:例如p + 1会使指针移动到下一行的起始位置,
(p + 1)获取第二行数组的首地址,(((p + 1)) + 1)访问第二行的第二个元素。
二、指针数组及其应用
1.指针数组定义:指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块。
2.实现字符串数组:使用指针数组来存储多个字符串,每个字符串的长度可以不同。
3.动态内存分配中的应用:指针数组和数组指针结合使用,灵活高效地管理内存。
三、动态数组
1.动态数组概念:动态数组允许程序在运行时根据需求调整数组大小,通过动态内存分配函数如malloc、calloc、realloc实现。
2.动态数组的创建和管理:介绍了如何使用C语言实现动态数组,包括定义结构体、创建动态数组函数、读取和更新数组元素的函数,以及释放内存。
四、缓冲区溢出攻击
1.缓冲区溢出定义:缓冲区溢出是程序试图将数据写入固定大小的缓冲区时,超出了缓冲区的界限,可能导致程序崩溃或执行恶意代码。
2.缓冲区溢出攻击的影响:攻击者通过输入“超长”的数据,修改程序内的合法数据,比如密码,从而获取操作权。
3.防御策略:介绍了防止缓冲区溢出和注入攻击的策略,强调了在使用C语言时要注意避免这种常见的攻击方式。

教材学习中的问题和解决过程(先问 AI)

问题1:什么时候会有缓冲区溢出?
问题1解决方案:
1.不安全的字符串操作函数使用:
使用如strcpy、strcat、sprintf、gets等不检查目标缓冲区大小的字符串操作函数,容易造成缓冲区溢出。
2.缺乏输入验证:
没有对用户输入或外部数据进行严格的长度和类型检查,导致超出预期的数据长度写入缓冲区。
3.错误的内存管理:
动态分配的内存未及时释放或未按预期使用,导致缓冲区溢出。
4.数组越界访问:
在处理数组时未正确检查索引范围,导致数组越界访问,可能会破坏相邻内存区域。
5.整数溢出与指针算术:
整数溢出发生在整数运算结果超出其数据类型能表示的最大值时,可能导致错误的内存访问。
指针算术错误处理,如不正确的指针加法或减法,也可能导致越界访问,进而引发缓冲区溢出。
6.格式化字符串攻击:
使用printf系列函数时,未正确使用格式字符串,攻击者可以控制格式字符串,导致任意内存读取或写入。
7.动态内存分配不足:
在动态分配内存时,没有为预期的输入分配足够的空间,导致数据超出分配的内存空间。
8.函数返回地址被覆盖:
攻击者通过输入超出缓冲区边界的恶意数据来破坏程序的正常执行流程,覆盖函数返回地址,使程序执行攻击者指定的恶意代码。
9.Unicode溢出:
Unicode溢出通过将Unicode字符插入需要ASCII字符的输入中来创建缓冲区溢出,改变程序的工作方式,出现进一步的安全问题。

问题2:输入多个字符数组时,什么时候要对回车进行处理
问题2解决方案:
1.命令行输入:
在命令行程序中,用户输入命令后通常会按回车键提交命令。在这种情况下,你可能需要从输入中移除回车符,以便正确处理命令。
2.文本编辑:
在文本编辑器中,用户输入的文本可能包含回车符来表示新行。在这种情况下,回车符是文本内容的一部分,不需要从输入中移除。
3.数据解析:
当从文件或网络接收数据并解析成多个字符数组时,如果数据格式中包含换行符作为字段分隔符,那么需要处理回车符以正确分割数据。
4.用户输入验证:
在某些情况下,需要验证用户输入是否符合特定的格式。如果格式要求中不包括回车符,那么在处理输入时需要移除它们。
5.字符串拼接:
如果你正在将多个用户输入的字符串拼接成一个大字符串,并且不希望在拼接的字符串中有额外的换行符,那么需要处理回车符。
6.多行输入:
当程序需要处理多行输入时,回车符通常用来标识一行的结束。在这种情况下,需要保留回车符以正确地识别每一行的开始和结束。
7.文件读取:
在读取文件时,如果文件内容包含多行文本,那么回车符(以及换行符)是区分各行的关键。在这种情况下,需要正确处理回车符以保持文本的结构。
8.跨平台兼容性:
不同操作系统可能使用不同的字符来表示换行(例如,Windows通常使用\r\n,而Unix/Linux使用\n)。在跨平台的应用程序中,可能需要处理这些差异,以确保程序在不同系统上都能正确处理换行。

基于AI的学习

代码调试中的问题和解决过程

  • 问题1:在进行字符串比较时直接用<,>,=
  • 问题1解决方案:对字符串进行比较应该用strcmp()函数
    strcmp(str1,str2)>0表示str1大于str2。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第九周 500/4000 1/9 20/20
第十周 500/4500 1/10 18/38
第十一周 500/5000 1/11 22/60
第十二周 500/5500 1/12 30/90

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的新博客 MarisaMagics Blog

新博客地址 MarisaMagics Blog 最近用 github + hexo 配置了一个新的博客,以后可能基本上都在新博客平台上更新文章 DA⭐ZE ~一切都是命运石之门的选择,本文章来源于博客园,作者:MarisaMagic,出处:https://www.cnblogs.com/MarisaMagic/p/18607182,未经允许严禁转载

locust 压力测试工具windows平台从零开始安装使用

locust是一个用python写的接口压力测试应用,我们只需要编写简单的代码才能运行测试,前期安装需要一点python基础。 用以测试的接口需要一个一个通过代码添加,如下: 这就是一个测试的接口了,很简单,只需要接口的路径和参数,接口的主机地址会在web端输入: locust需要pyth…

OpenDaylight下发流表

实验一:单流表(v1.0) 下发流表实现h1和h2之间不能互通。 1、启动OpenDaylight ./karaf查看6633端口是否处于监听状态 netstat -an | grep 6633在物理机浏览器中访问虚拟机ip:8181/index.html登录OpenDaylight网页端。 账号密码都是admin。后面做实验的时候,出现过无法登录的…

深度学习入门笔记——神经网络的构建和使用

神经网络的整体构建 神经网络的基本骨架 首先可以在Pytorch官网的Python API中查看torch.nn的使用,如下所示。可以看到神经网络包括Container(基本骨架)、卷积层、池化层、Padding层、非线性激活等等。 构建一个神经网络首先要先构建起基本骨架,也就是Containersnn.Moudle的…

计算机做的所有事情都叫计算

计算机怎么解决问题?答:需要告诉计算机解决问题的步骤(不要写成说明书了) 怎么告诉计算机这个步骤?答:编程语言写程序 1. 写程序不是表达关系,是表达动作2. 是解决问题的步骤,编程的时候不是你说一句它做一句3. 编程语言不是用来和计算机交流的4. 计算机的交流是你的操…

第四章 文件管理

文件 4.1.1 文件的基本概念文件是指由创建者所定义的、具有文件名的一组相关元素的集合,是以硬盘为载体的存储在计算机上的信息集合 是文件系统中最大的数据单位 在用户进行的输入,输出中,则以文件为基本单位4.1.5 文件的逻辑结构 按文件是否有结构分类 无结构文件 文件内部…

程序执行两种方式

1.你写的程序交文件给它,它一步步按照你的要求执行 2.写的程序文件交给它,它翻译成计算机懂的文件,用计算机懂的文件执行 解释语言vs编译语言1. 语言本身没有解释和编译的区分,任何语言都可以编译执行和解释执行。2. 只是语言常用执行方式的传统和习惯的问题3. 解释语言 特…

P1070 [NOIP2009 普及组] 道路游戏

ProblemSolve 此题是求最优解,考虑贪心时会发现这个不满足局部最优->整体最优,故考虑DP 通过输入格式能受到启发,时间可以作为维度之一,所以定义为: \(f_{i,j}\)第i秒末,机器人在j号工厂能获得的最大金币 因为机器存在时间有上限,所以推的时候枚举本次机器人到底走了多…

2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因数。每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j

2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因数。每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j开始的长度为k的子串替换从i开始的长度为k的子串。要使得word成为一个K周期字符串,需要进行…

实现综合实例:简单文字处软件 (一)

学业繁重,更新缓慢。 本内容主要用于个人学习/复习QT简单入门控件 DAY ONE 创建项目界面设计与开发 实现简单的菜单栏设计本人并没有使用代码实现,而是用于使用UI设计师界面。action条例分类 设计控件(帮助) 设计帮助控件: 我们转到槽,填写如下代码: 这是一个基于QT6实现…

微信防撤回插件

插件 https://pan.quark.cn/s/bb5165185a6a部署 先查看电脑微信版本,比如我这里是3.9.12.15版本下载对应版本之后,将插件名字改为WeChatWin.dll,删掉前面的版本号在微信所在的文件夹下,找到这个同名插件,用下载的插件替换它即可 end 替换之后需要重启微信才可以,效果如下…