当前位置: 首页 > article >正文

安全编码课程 实验6 整数安全

实验项目

实现安全计数器实现 Counter 结构,确保计数范围为 0~100。

实验要求:

1、使用 struct 封装计数值value;

2、计数器初值为 0;

3、increment() 方法增加计数,但不能超过 100;

4、decrement() 方法减少计数,但不能小于 0;

5、get_count() 方法返回当前计数值;

6、释放计数器。

7、编写测试代码,注意测试边界条件。

以上1-7用c语言编写

8、用c++构造计数器类,同样包含上述功能,无需测试

提交:

1. 代码

2. 测试用例

3. 过程及结果截图

目录

实验项目

实验步骤、实验结果及结果分析:

1. 代码

1、使用 struct 封装计数值value;

2、计数器初值为 0;

3、increment() 方法增加计数,但不能超过 100;

4、decrement() 方法减少计数,但不能小于 0;

5、get_count() 方法返回当前计数值;

6、释放计数器。

2. 测试用例 

7、编写测试代码。

8、用c++构造计数器类,同样包含上述功能

3. 过程及结果截图


实验步骤、实验结果及结果分析:

1. 代码

1、使用 struct 封装计数值value;

typedef struct {int value;   
} Counter;

2、计数器初值为 0;

Counter* create_counter() {Counter* counter = (Counter*)malloc(sizeof(Counter));if (counter != NULL) {counter->value = 0;  // 初始化为0}return counter;
}

3、increment() 方法增加计数,但不能超过 100;

void increment(Counter* counter) {if (counter->value < 100) {counter->value++;}
}

4、decrement() 方法减少计数,但不能小于 0;

void decrement(Counter* counter) {if (counter->value > 0) {counter->value--;}
}

5、get_count() 方法返回当前计数值;

int get_count(Counter* counter) {return counter->value;   
}   

6、释放计数器。

void destroy_counter(Counter* counter) {free(counter);   
}   

2. 测试用例 

7、编写测试代码。

    // 创建计数器Counter* counter = create_counter();// 测试初始值printf("Initial count: %d \n", get_count(counter));// 测试增加到上限for (int i = 0; i < 105; i++) {increment(counter);}printf("After 105 increments: %d \n", get_count(counter));// 测试减少到下限for (int i = 0; i < 105; i++) {decrement(counter);}printf("After 105 decrements: %d \n", get_count(counter));// 测试边界附近的单个操作increment(counter);printf("After increment at 0: %d \n", get_count(counter));increment(counter);printf("After increment at 0: %d \n", get_count(counter));decrement(counter);printf("After decrement at 1: %d \n", get_count(counter));decrement(counter);printf("After decrement at 1: %d \n", get_count(counter));decrement(counter);printf("After decrement at 1: %d \n", get_count(counter));// 边界精确测试   for (int i = 0; i < 100; i++) increment(counter);   printf("After exactly 100 increments: %d\n", get_count(counter)); // 混合操作测试   for (int i = 0; i < 200; i++) {if (i % 3 == 0) decrement(counter);else increment(counter);   }   printf("After mixed 200 operations: %d\n", get_count(counter)); // 释放计数器destroy_counter(counter);

8、用c++构造计数器类,同样包含上述功能

#include <iostream>  
class Counter {    
private:int value;  
public:// 1. 使用类封装计数值value// 2. 构造函数初始化计数器为0Counter() : value(0) {}// 3. increment()方法增加计数(不超过100)void increment() {if (value < 100) {value++;}}// 4. decrement()方法减少计数(不小于0)void decrement() {if (value > 0) {value--;}}// 5. get_count()方法返回当前计数值int get_count() const {return value;}// 6. 析构函数自动释放资源~Counter() = default;
};

3. 过程及结果截图

计数器程序运行结果符合预期,边界条件和操作逻辑都实现。

相关文章:

安全编码课程 实验6 整数安全

实验项目 实现安全计数器&#xff1a;实现 Counter 结构&#xff0c;确保计数范围为 0~100。 实验要求&#xff1a; 1、使用 struct 封装计数值value&#xff1b; 2、计数器初值为 0&#xff1b; 3、increment() 方法增加计数&#xff0c;但不能超过 100&#xff1b; 4、decrem…...

解决上传PDF、视频、音频等格式文件到FTP站点时报错“将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上”问题

一、问题描述 可以将文本文件(.txt格式),图像文件(.jpg、.png等格式)上传到我们的FTP服务器上;但是上传一些PDF文件、视频等文件时就会报错“ 将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上。 详细信息: 200 Type set to l. 227 Entering Pas…...

【Linux操作系统】:信号

Linux操作系统下的信号 一、引言 首先我们可以简单理解一下信号的概念&#xff0c;信号&#xff0c;顾名思义&#xff0c;就是我们操作系统发送给进程的消息。举个简单的例子&#xff0c;我们在写C/C程序的时候&#xff0c;当执行a / 0类似的操作的时候&#xff0c;程序直接就挂…...

经典频域分析法(Bode图、Nyquist判据) —— 理论、案例与交互式 GUI 实现

目录 经典频域分析法(Bode图、Nyquist判据) —— 理论、案例与交互式 GUI 实现一、引言二、经典频域分析方法的基本原理2.1 Bode 图分析2.2 Nyquist 判据三、数学建模与公式推导3.1 一阶系统的频域响应3.2 多极系统的 Bode 图绘制3.3 Nyquist 判据的数学描述四、经典频域分析…...

使用scoop一键下载jdk和实现版本切换

安装 在 PowerShell 中输入下面内容&#xff0c;保证允许本地脚本的执行&#xff1a; set-executionpolicy remotesigned -scope currentuser然后执行下面的命令安装 Scoop&#xff1a; iwr -useb get.scoop.sh | iex国内用户可以使用镜像源安装&#xff1a;powershell iwr -us…...

对状态模式的理解

对状态模式的理解 一、场景二、不采用状态模式1、代码2、缺点 三、采用状态模式1、代码1.1 状态类1.2 上下文&#xff08;这里指&#xff1a;媒体播放器&#xff09;1.3 客户端 2、优点 一、场景 同一个东西&#xff08;例如&#xff1a;媒体播放器&#xff09;&#xff0c;有一…...

LangChain与LangGraph内置回调函数

LangChain与LangGraph回调函数指南 回调函数概述 LangChain和LangGraph共享同一套回调系统&#xff0c;通过BaseCallbackHandler类提供了丰富的生命周期钩子&#xff0c;可用于监控、调试和跟踪AI应用的执行过程。 回调函数流程图 #mermaid-svg-EsqgET3Cjlj0l0Z1 {font-fami…...

字符串哈希算法详解:原理、实现与应用

字符串哈希是一种高效处理字符串匹配和比较的技术&#xff0c;它通过将字符串映射为一个唯一的数值&#xff08;哈希值&#xff09;&#xff0c;从而在O(1)时间内完成子串的比较。本文将结合代码实现&#xff0c;详细讲解前缀哈希法的工作原理&#xff0c;并通过流程图逐步解析…...

vue2(webpack)集成electron和 electron 打包

前言 之前发过一篇vue集成electron的文章&#xff0c;但是用vue3vite实现的&#xff0c;在vue2webpack工程可能不适用&#xff0c;所以这篇文章就主要介绍vue2webpack集成electron方法 创建项目 vue create vue-electron-demo目录架构 vue-electron-demo/ ├── src/ …...

C++内存管理优化实战:提升应用性能与效率

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开发技术&#xff0c;能熟练应用常用数据库SQL server,Oracle…...

redis数据迁移之通过redis-dump镜像

这里写目录标题 一、redis-dump 镜像打包1.1 安装windows docker1.2 idea项目创建1.3 idea镜像打包 二、redis数据迁移2.1 数据导出2.2 数据导入 一、redis-dump 镜像打包 没有找到可用的redis-dump镜像&#xff0c;需要自己打包一下&#xff0c;这里我是在idea直接打包的 1.…...

C语言单链表的增删改补

目录 &#xff08;一&#xff09;单链表的结构定义及初始化 (二)单链表的尾插&#xff0c;头插 (三)单链表的尾删&#xff0c;头删 (四)单链表的查找&#xff0c;删除&#xff0c;销毁 单链表是数据结构课程里的第二个数据结构。单链表在逻辑结构是连续的&#xff0c;在物理…...

redis导入成功,缺不显示数据

SpringBootTest class SecurityApplicationTests {AutowiredStringRedisTemplate template; //添加这句代码&#xff0c;自动装载&#xff0c;即可解决文章三处代码报错Testvoid contextLoads() {String compact Jwts.builder().signWith(Jwts.SIG.HS512.key().build()).subj…...

从表格到序列:Swift 如何优雅地解 LeetCode 251 展开二维向量

文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在这篇文章中&#xff0c;我们将深入探讨 LeetCode 第 251 题——“展开二维向量”的问题。通过 Swift 语言&#xff0c;我们不仅会提供可运行的示例代码&#xff0c;还会结合实际场景进行…...

汇丰xxx

1. Spring Boot 的了解&#xff0c;解决什么问题&#xff1f; 我的理解&#xff1a; Spring Boot 是一个基于 Spring 框架的快速开发脚手架&#xff0c;它简化了 Spring 应用的初始搭建和开发过程。解决的问题&#xff1a; 简化配置&#xff1a; 传统的 Spring 应用需要大量的…...

Spring MVC与Spring Boot文件上传配置项对比

Spring MVC与Spring Boot文件上传配置项对比 一、Spring MVC配置项&#xff08;基于不同MultipartResolver实现&#xff09; 1. 使用 CommonsMultipartResolver&#xff08;Apache Commons FileUpload&#xff09; Bean public MultipartResolver multipartResolver() {Common…...

小型园区网实验

划分VLAN SW3 [sw3]vlan batch 2 3 20 30 [sw3]interface GigabitEthernet 0/0/1 [sw3-GigabitEthernet0/0/1]port link-type access [sw3-GigabitEthernet0/0/1]port default vlan 2 [sw3-GigabitEthernet0/0/1]int g0/0/2 [sw3-GigabitEthernet0/0/2]port link-type acces…...

c# 数据结构 链表篇 有关单链表的一切

本人能力有限,本文仅作学习交流与参考,如有不足还请斧正 目录 0.单链表好处 0.5.单链表分类 1.无虚拟头节点情况 图示: 代码: 头插/尾插 删除 搜索 遍历全部 测试代码: 全部代码 2.有尾指针情况 尾插 全部代码 3.有虚拟头节点情况 全部代码 4.循环单链表 几个…...

VS Code连接服务器编写Python文件

1、下载 Visual Studio Code 2、打开扩展&#xff08;ctrl shift x ) 3、搜索 Remote - SSH&#xff0c;安装 4、F1 或者 点金左下角 5、选择&#xff1a;Remote-SSH: Connect to Host……&#xff0c;回车 6、第一次用的时候&#xff0c;VS Code 会提示添加 SSH 主机。输…...

图解AUTOSAR_SWS_FlexRayNetworkManagement

FlexRay网络管理详解 AUTOSAR标准FlexRay网络管理模块技术说明 目录 1. FlexRay网络管理概述 1.1 模块功能与目的1.2 适用范围与限制2. FlexRay网络管理架构 2.1 模块层次结构2.2 组件交互关系3. FlexRay网络管理状态机 3.1 状态转换机制3.2 主要状态说明4. FlexRay网络管理通信…...

Gitea的安装和配置以及应用

Gitea的安装和配置以及应用 一、安装 1、创建数据库和数据库账户&#xff08;pg&#xff09; su – postgres -c "psql" CREATE ROLE gitea WITH LOGIN PASSWORD gitea; CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE …...

Blender 转 STL 文件全攻略:从基础到进阶

在 3D 建模与打印领域&#xff0c;Blender 凭借其强大的功能和开源特性&#xff0c;深受创作者喜爱。而 STL 文件格式&#xff0c;作为 3D 打印行业的通用标准&#xff0c;能被绝大多数 3D 打印软件和设备所识别。因此&#xff0c;将 Blender 模型转换为 STL 文件&#xff0c;是…...

UI自动化基础(1)

1、pip install selenium4.3.0&#xff0c;最好指定版本安装&#xff0c;因为不同的版本可能会有一些兼容 性的问题。 2、pip uninstall urllib3 &#xff0c;pip install urllib31.26.15 【执行版本安装】&#xff0c;goole是114.版本 3、装好浏览器&#xff0c;正确安装。最好…...

$_GET变量

$_GET 是一个超级全局变量&#xff0c;在 PHP 中用于收集通过 URL 查询字符串传递的参数。它是一个关联数组&#xff0c;包含了所有通过 HTTP GET 方法发送到当前脚本的变量。 预定义的 $_GET 变量用于收集来自 method"get" 的表单中的值。 从带有 GET 方法的表单发…...

TBE(TVM的扩展)

算子 张量 一个张量只有一种数据类型 在内存中只能线性存储&#xff0c;最终形成一个长的一维数组 晟腾AI的数据格式 AIPP是对我们常见的数据格式转化成AI core支持的数据格式 广播机制 TVM TBE的第一种开发方式&#xff1a;DSL TBE的第二种开发方式&#xff1a;TVM TBE的第…...

【Function Calling与Tool Calling】深度解析大模型智能中枢的架构革命

目录 一、范式转移&#xff1a;从对话引擎到智能中枢 二、核心技术解析 2.1 Function Calling技术栈 2.2 Tool Calling实现模式 三、企业级应用架构设计 3.1 智能工单系统案例 3.2 性能优化策略 四、安全与治理框架 4.1 权限控制矩阵 4.2 审计追踪设计 五、开发者实…...

知识表示方法之六:过程表示法(Procedural Representation)

在人工智能的发展史中&#xff0c;关于知识的表示方法曾存在两种不同的观点。一种观点认为知识主要是陈述性的&#xff0c;其表示方法应着重将其静态特性&#xff0c;即事物的属性以及事物间的关系表示出来&#xff0c;称以这种观点表示知识的方法为陈述式或说明式表示法&#…...

Java 中序列化和反序列化

Java 中的序列化&#xff08;Serialization&#xff09;和反序列化&#xff08;Deserialization&#xff09;是将对象和二进制数据&#xff08;或其他格式&#xff09;之间转换的过程&#xff0c;常见于对象传输、缓存、持久化等场景。 下面是 Java 中常见的几种 序列化/反序列…...

sql-labs靶场 less-2

文章目录 sqli-labs靶场less 2 联合注入 sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、’、“”&#xf…...

Spring配置部分

Spring配置部分 单纯的使用Spring可以通过配置文件xml&#xff0c;配置注解&#xff0c;全注解方式执行 无论使用哪种方式&#xff0c;都需要在Main方法中加载配置&#xff08;配置文件或者注解&#xff09;获取到Spring容器&#xff0c;在通过容器的GetBean方法获取Bean对象…...