自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Goallegoal的博客

人生有两条路,一条是必须走的,一条是想走的,把必须走的走好,才能走好想走的路。

  • 博客(242)
  • 资源 (3)
  • 收藏
  • 关注

原创 Qt常用对话框及用法总结

Qt常用对话框及用法总结1、QMessageBox模态消息对话框QMessageBox包含上述四种消息对话框,分别为问题、信息、警告、错误提示,对外API分别为:QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardB

2020-11-26 11:17:01 518

原创 Qt创建模态和非模态对话框

Qt创建模态和非模态对话框在使用软件时,会遇到各式各样的对话框,弹出的对话框大致可以分为两大类,模态对话框和非模态对话框,怎么对这两种对话框进行区分呢?简单来说,对于模态对话框,在未关闭之前,无法再对同一软件的其他窗口进行操作,即强制性用户交互;而非模态对话框与之相反,未关闭之前,依然可以操作同软件下的其他窗口,即非强制性用户交互。Qt中根据功能需求,可以分别对这两类对话框进行设置与构建。首先来看模态对话框,强制交互的模态对话框一经打开,程序的运行会进入阻塞状态,直至对话框关闭或触发其他动作。其简单部

2020-11-25 15:19:35 497

原创 QMainWindow添加资源文件

QMainWindow添加资源文件之前已经通过纯代码的方式添加了QMainWindow的菜单栏、状态栏、铆接部件及中心部件,现在使用Qt的设计模式直接添加菜单栏。菜单栏添加完成,再回到编辑模式,通过代码向 “文件-新建” 前面添加一个图标: // 通过ui可以找到所有的已添加控件 // 使用绝对路径的方式 ui->actionnew->setIcon(QIcon(/*图片路径*/));开发环境更换可能会导致绝对路径不可用,下面介绍向qt中添加资源文件:1、首先

2020-11-25 11:45:42 78

原创 QMainWindow菜单栏、工具栏、铆接部件及中心部件的添加和使用

QMainWindow菜单栏、工具栏、铆接部件及中心部件的添加和使用QMainWindow是一个用户提供主窗口程序的类,包含一个菜单栏、多个工具栏、多个铆接部件、一个状态栏及一个中心部件,是许多应用程序的基础,如文本编辑器、图片编辑器等。菜单栏菜单栏最多只能有一个,下面演示菜单栏的简单创建,包含头文件#include <QMenuBar> // 创建菜单栏 QMenuBar *bar = menuBar(); // 将菜单栏放入窗口中 setMenuBar

2020-11-25 10:21:53 475

原创 Qt使用lambda表达式实现无参信号与有参槽的连接

Qt使用lambda表达式实现信号与槽连接C++11中的Lambda表达式用于定义并创建匿名的对象,以简化编程工作,Lambda表达式的基本结构为:[函数对象参数](操作符重载函数参数)mutable->返回值{函数体}。其中函数对象参数,[]表示一个lambda表达式的开始,这部分必须存在,不能省略。函数对象参数是传递给编译器自动生的函数对象类的构造函数的。函数对象参数只能使用那些到定义lambda为止时lambda所在作用范围内可见的局部变量,包括所在类的this,函数对象参数有以下几种形式

2020-11-24 15:32:11 839

原创 Qt编程中的信号和槽机制

Qt编程中的信号和槽机制在使用自定义类创建一个按钮之后,只能看到一个按钮的图形,但是使用鼠标点击并无任何反应,下面想要实现一个“点击按钮可以关闭窗口”的功能。关闭窗口的功能可以被抽象为以下对象和操作,即:按钮,点击按钮,窗口,关闭窗口。在qt中使用connect实现这个过程。connet(信号的发送者,发送的具体信号,信号的接受者,信号的处理(槽))信号槽的一个优点:松散耦合,即信号的发送端和接收端本身是没有关联的,通过connect连接,将两端耦合在一起。// myself buttonMyP

2020-11-24 11:03:30 168

原创 Qt理解对象模型-对象树

Qt理解对象模型-对象树在Qt中创建对象的时候会提供一个Parent指针,QObject是以对象树的形式组织起来的,当创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是parent,也就是父对象指针。这相当于,在创建QObject对象时,可以提供一个其父对象,此时创建的QObject会自动添加到其父对象的children列表中。(注意,这里的父对象并不是继承意义上的父类)当父对象析构的时候,这个列表中的所有对象都将会被析构。这种机制在GUI程序设

2020-11-23 16:34:04 202

原创 Qt Creator中按钮控件常用API

Qt Creator中按钮控件常用API使用QPushButton创建按钮引入头文件#include <QPushButton>后,使用QPushButton *btn = new QPushButton;使用btn->show();的方式对按钮进行显示,则会以顶层方式弹出窗口控件;如果想让btn对象依赖在myWidget窗口中,则需要在父类的构造函数中使用btn->setParent(this);。在按钮上显示文本btn->setText("button");在创

2020-11-23 16:33:24 601

原创 广义表与二叉树之间的相互转换

广义表与二叉树之间的相互转换二叉树是树形结构中一种特殊的树,其特点是每个结点最多只有两个孩子结点。二叉树除了可以通过典型的树状图来表示外,还可以使用广义表进行表示,例如:A(B,C)表示根结点A的左孩子结点为B,右孩子结点为C;A(,C)表示根结点A的左子树为空,右孩子结点为C。依此类推,可以将任何一棵二叉树以广义表的形式表示出来。广义表转化为二叉树广义表转化成二叉树可以借助栈来实现,利用栈先进后出的特点,先将根结点压入栈中,如果左孩子结点不为空,则将其作为栈顶结点的左孩子结点,并压入栈中,递归左子树

2020-11-17 17:17:05 5502 6

原创 2020-10-24

1024

2020-10-24 08:48:40 60

原创 2020-10-24

1024

2020-10-24 08:41:38 60

原创 判断字符是否是同一个字母的大小写

判断字符是否是同一个字母的大小写方案1、由ASCII码表知,同一个字母的小写表示ASCII码值要比大写表示的大32char ch1 = 'a';char ch2 = 'A';if( ch1 == ch2 + 32 ) ;方案2、tolower将字符转换为小写if( tolower(ch1) == tolower(ch2) ) ;方案3、使用异或,通过观察大小写字母的ASCII码值发现,同一个字母的大写和小写之间相差32,用二进制表示时,差异仅体现在从右往左数的第6位上,所以可以通过判断

2020-10-10 10:35:28 1529

原创 atoi()函数的使用

atoi()函数的使用atoi()用于将字符串转换为整型值,其函数原型为int atoi(const char *nptr);,该函数在转换字符串时,会忽略空字符并在遇到非数字字符时停止转换,若无法转换则返回0。使用该函数需要包含头文件#include <cstdlib>string str("777as");int num = atoi(str.c_str());cout << num << endl; ...

2020-10-09 19:31:03 353

原创 C++ string类成员函数c_str()的用法

C++ string类成员函数c_str()的用法c_str()生成一个const char*指针,指向以空字符终止的数组,该指针不需要手动释放和删除。在使用c_str()时要注意,c_str()指向的数组是一个临时数组,其中的数据会因为程序的某些操作而失效,例如:string str("hello!");const char *pstr = str.c_str();cout << pstr << endl; // hello!str = "world";cout &

2020-10-09 19:09:21 494

原创 C++string类常用方法

C++string类常用方法1、string(const char *s) :将 string 对象初始化为 s 指向的字符串string str("hello");2、string(size_type n,char c) :创建一个包含 n 个元素的 string 对象,其中每个元素都被初始化为字符 cstring str(10, 'a');3、string(const string &str) :将一个 string 对象初始化为 string 对象 str(复制构造函数)str

2020-10-09 15:34:26 90310 13

原创 函数递归

函数递归程序调用自身的编程技巧称为递归。递归做为一种算法,在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:大事化小。递归的两个必要条件:1、存在限制条件,当满足这个限制条件时,递归便不再继续。2、每次递归调用之后,越来越接近这个限制条件。练习1:接收一个无符号整型值,按顺

2020-08-06 21:34:13 112

原创 C语言字符和字符串库函数的使用、注意事项及模拟实现

C语言中没有字符串类型,字符串通常会被放到常量字符串或者字符数组中,在程序的开发过程中要经常对字符和字符串进行处理,这就需要引入一些库函数来简化字符、字符串的处理操作,提高程序的开发效率。

2020-08-06 17:20:21 410

原创 C语言strstr()函数模拟实现和库实现之间的差距

C语言strstr()函数模拟实现和库实现之间的差距strstr()的函数原型为char *strstr(const char *haystack, const char *needle),用于在字符串 haystack 中查找第一次出现字符串 needle 的位置,注意不包含终止符 ‘\0’。该函数的返回值为在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。下面先贴上自己模拟实现的myStrstr(),先不看代码中的细节处理,仅关注代码逻辑。在代码编写的过程中

2020-08-06 10:25:37 189

原创 C语言错误处理-输出错误信息

C语言错误处理-输出错误信息程序开发过程中,不可避免地会因为细节疏忽导致程序的编译、运行出错,当出现错误时编译器一般会将错误信息展示出来,但由程序操作或用户输入导致的错误往往会使程序直接崩溃并无任何的提示,此时,就需要一种方法能够用在程序可能出错的地方,当错误发生时可以提前将错误信息输出并中止运行,避免程序的崩溃、简化程序bug的查找。下面介绍C语言中几种用来主动输出错误信息的方法。stderr首先介绍stderr标准错误,在程序创建的同时会开启三个默认的流,分别为标准输入stdin、标准输出stdo

2020-08-05 10:09:56 5028

原创 C语言柔性数组使用方法、特点及优点

C语言柔性数组使用方法、特点及优点在C99标准中定义有,结构体中的最后一个元素允许是未知大小的数组,这个数组就叫做柔性数组,所以说柔性数组其实是结构体中的一个数组,“柔性” 指的是该数组的大小可大可小。例如:struct S{ int i; int a[];//柔性数组成员,该数组为柔性数组};上面的定义是没有问题的,如果使用的编译器在运行上述代码时报错无法编译,可以像如下方式定义:struct S{ int i; int a[0];//将数组的大小设为0};上述柔性数组的声明

2020-08-04 08:49:14 685

原创 Linux环境下使用fcntl实现C语言非阻塞输入

Linux环境下使用fcntl实现C语言非阻塞输入在使用C语言编程时,常常会用到scanf()、getchar()等函数来获取键盘的输入,当键盘没有输入时程序会发生阻塞并一直保持在阻塞状态,此时如果想要继续执行下一步的程序,就需要将IO状态置为非阻塞,以确保无用户输入的情况下程序的正常执行。fcntl是Linux中的函数,用来改变已打开文件的性质,其定义为int fcntl(int fd, int cmd);,其中参数fd表示欲设置的文件描述符,参数cmd代表将要执行的操作,如果该操作需要键入参数,fc

2020-08-02 17:54:48 1714 1

原创 Linux环境下静态库和动态库(共享库)的创建及使用

Linux环境下静态库和动态库(共享库)的创建及使用编写程序时,常常将重复代码写进函数,通过多次调用函数来减少工作量,类似的,当一个工作需要多次调用某些函数和变量时,可以将这些函数、变量封装成库,供其他程序调用,提高开发效率。C语言中有两种库类型,分别为静态库和动态库(共享库)。静态库静态库是在目标文件链接成可执行文件过程中,直接将代码载入可执行文件,后期程序的运行不再需要静态库。在Linux系统中,静态库的后缀为.a,静态库的生成分为两步,第一步将源文件编译生成目标文件,第二步通过目标文件生成静态库

2020-08-02 16:37:12 1104

原创 打卡机核心功能实现(C语言)

222222222应市场需求,某工程师现设计了一款新上下班打卡机,打卡机具有以下功能:(1)上班打卡,员工具有编号(首位为 1 的六位编号),输入编号后,再输入校验码,校验码生成规则:员工编号除首位反序,再与员工编号求和,如:员工编号,110086,校验码为 178087。校验码错误即打卡失败。记录打卡时间 。(2)下班打卡,只需输入员工编号即可。记录打卡时间,显示该人员今天上班时长,如果上班时长不够,显示早退 xx 分钟。可以更新下班打卡时间。无下班打卡显示缺卡。(3)可以设置规定上班时长,如 9

2020-08-01 22:32:28 1798

原创 C语言整型转字符串

C语言整型转字符串顺序存储顺序打印#include <stdio.h>int main(){ int num = 110086; char str[6] = {0}; int divnum = 100000; int i = 0; for(i=0; i<6; i++) { str[i] = (num / divnum)+48; num = num % divnum; divnum =

2020-08-01 21:44:05 1295

原创 C语言自定义类型

C语言自定义类型结构体结构体类型的声明结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。struct tag{ member-list;}variable-list;struct tag x;也可以通过typedef对类型重命名typedef struct Student{ char name[20]; int age; char sex[6];} Student;// 这里的Student不是变量名,而是类型名Student x;对结构

2020-08-01 09:15:42 272

原创 动态内存管理

动态内存管理为什么存在动态内存开辟常规的开辟内存空间的方式,例如声明变量、数组等,有以下2个特点:1、空间开辟的大小是固定的;2、数组在声明的时候,必须指定数组的长度,所需要的内存在编译时分配。如果想要在程序运行过程中根据实际内存使用情况动态的开辟内存空间,以上方法就做不到了,只能尝试动态内存管理。动态内存函数malloc()malloc函数包含在stdlib.h头文件中,原型为void* malloc(size_t size);这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针

2020-08-01 09:15:08 131

原创 C语言数组和指针笔试题小结

11111111111一维数组 int a[] = {1,2,3,4}; printf("%d\n", sizeof(a)); // 16,sizeof(数组名),当数组名单独放在sizeof()中时,数组名表示整个数组 printf("%d\n", sizeof(a+0)); // 8,数组名没有单独存放时表示首元素地址 printf("%d\n", sizeof(*a)); // 4 printf("%d\n", sizeof(a+1)); // 8 printf("%d\n",

2020-07-30 08:09:29 289

原创 C语言指针从入门到进阶

111指针定义在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”(指针是一个变量,用来存放地址)。意思是通过它能找到以它为地址的内存单元(内存空间编址是以一个字节为一个地址)。int a = 10; // 变量a占用了4个地址空间int *p = &a; //取a的地址,是拿到4个地址空间的起始位置地址// 将此地址存放到 p 中,此时p就是指针

2020-07-27 19:06:12 174

原创 C语言文件操作

文件操作文件基础一般情况下,将文件分为文本文件和二进制文件两种。文本文件:以ASCII码编写的可视化的字符型文件,不同的文字以特殊编码存在,如GBK、utf-8等。二进制文件:直接以原生二进制码存放的文件,如BMP等图片文件,MP3等音频文件,exe等可执行文件。数据流:一组有序、有起点和终点的字节的数据序列,程序和数据的交互是以流的形式进行的。标准 IO 及缓存基础文件操作C语言获取的文件,其使用 FILE 结构体进行定义。在命令行上显示一段内容printf("hello!\n");

2020-07-24 08:26:31 123

原创 C语言指针学习与使用

C语言指针学习与使用计算机存储想要更好的使用指针,需要对计算机的存储有一定的概念和了解。下面的图片中展示了计算机的硬件结构:存储设备除了上述的主存储器外,还有其他的一些在执行程序时可能会用到的存储设备,并根据各自的特点对其进行了层次划分:使用主存储器进行数据存储时,如果每次存储都要编程人员准确找到存储单元的物理地址,那么不仅增加了工作量而且降低了工作效率。此时就有了虚拟内存的概念。CPU在执行数据的读、写操作时,拿到的是虚拟地址,然后通过内存管理单元(MMU,Memory Managemen

2020-07-22 18:18:19 711

原创 TypeError: Can‘t mix strings and bytes in path components

TypeError: Can’t mix strings and bytes in path componentsCan't mix strings and bytes in path componentsTraceback (most recent call last): File "vulture.py", line 831, in main firmware.extract_files_to(output, _test=is_test) File "vulture.py", lin

2020-07-21 16:26:54 4612 2

原创 IoT中的Web应用和移动应用

IoT中的Web应用和移动应用------------------------------------------------------------------------------------------------------------------------------------------------------学习《物联网渗透测试》IoT中的Web应用对于IoT设备而言,常常采用 Web 应用对其设备进行控制,因此,无论是从网络内部还是网络外部来看,Web 应用都是发起攻击的常见途径

2020-07-21 14:06:18 480

原创 了解物联网固件

了解物联网固件固件是一种写入硬件设备的软件,作用是对应用和各项系统功能实施控制。固件中包含底层代码,这些代码能够帮助软件实现对硬件的操作。运行固件的设备称为嵌入式系统,嵌入式系统的硬件资源在存储能力以及内存等方面往往具有诸多限制。固件通常由 bootloader、内核、文件系统以及其他资源组成。在嵌入式操作系统中,BootLoader,加载引导程序,是系统加电后运行的第一段软件代码,是在操作系统内核运行之前运行。首先系统加电后bootloader对嵌入式系统硬件进行初始化使之先运行起来,然后将嵌入式

2020-07-20 20:21:42 1075

原创 物联网安全架构的分层处理

物联网安全架构的分层处理物联网的实现涉及多个层次,没有一种解决方案能够应对针对物联网的所有威胁,为了给予物联网最适合的保护措施,需要对物联网安全进行分层处理。不同的权威机构在不同的时间会对物联网安全架构划分不同的层次,下面记录三种分层方式:1、2016年,权威物联网研究机构 IoT Analytics 将物联网安全架构划分为以下4层。2、在《2017物联网安全研究报告中》中国电信和绿盟科技公司将其划分为以下四层。3、中国信息通信研究院在2018年发布的《物联网安全白皮书》中根据物联网应用系统模型

2020-07-20 10:27:59 924 1

原创 C语言结构体的学习与使用

C语言结构体的学习与使用结构体定义与使用结构体是C语言中的明显的构造类型,相对于只能存储相同类型元素的数组,结构体是存放不同类型数据的集合。结构体一般会在处理数据信息时使用。构造结构体定义,类型为 struct Personstruct Person{ int number; char sex; double money;};上述形式只是定义了一个类型,类型中有 number、sex、money这些内容。结构体的使用,使用结构体类型定义变量struct Person p1;//

2020-07-20 09:39:27 262

原创 C语言编程练习(三)

C语言编程练习(三)1、编程一个逆序的数组,只能交换,不能定义临时数组void getReverse(){ int order[] = {1, 2, 3, 4, 5, 6, 7}; int len = sizeof(order)/sizeof(order[0]); int index = 0; int tmp = 0; for(index=0; index<len/2; index++) { if(index != len-index-1) { tmp = order[

2020-07-18 11:17:08 160

原创 图解约瑟夫环(C语言实现)

图解约瑟夫环(C语言实现)场景描述:1、一群人围在一起坐成环状;2、从某个编号的人开始报数;3、数到 M 的时候,此人出列,他的下一个人又从1开始报数,数到 M 的那个人又出列;4、一直循环,直到所有人出列,约瑟夫环结束。这里假设有 8 个人围成了环状,依次标号为 1 至 8。假设游戏从 3 号玩家开始,规定每次从 1 开始计数,数到 3 的人出列,出列的玩家变为红色,未出列玩家仍用绿色表示。...

2020-07-18 11:08:30 4211

原创 C语言编程练习(二)

C语言编程练习(二)1、在屏幕上输出如下图形 键盘输入n,比如输入3如下 * * * * * *void printStar(){ printf("Please input the line of star:"); int n = 0; scanf("%d", &n); int index = 0; int numofStar = 0; int numofNull = 0; for(index=1; index<=n; index++) { for(numo

2020-07-17 10:26:37 323

原创 使用gedit时报错failed to commit changes to dconf: The connection is closed

使用gedit时报错failed to commit changes to dconf: The connection is closed错误场景:使用 gedit test.c命令编辑test.c文档时出现该错误,但是文档可以正常打开。解决方案:之前没有遇到过这种情况,以为是gedit程序配置文件加载失败导致的,就直接重启虚拟机,然后打开文件时依然会出现这个错误,此时是在 root 用户下,考虑到可能是权限问题导致的错误,切换到普通用户目录下,并重启了虚拟机,再次使用时就不会报错了。错误信息如下:

2020-07-16 19:57:09 8870 7

原创 unable to create directory ‘/run/user/0/dconf‘: Permission denied. dconf will not work properly.

使用gedit时报错failed to commit changes to dconf: The connection is closed错误场景:使用 gedit test.c命令编辑test.c文档时出现该错误,但是文档可以正常打开。解决方案:之前没有遇到过这种情况,以为是gedit程序配置文件加载失败导致的,就直接重启虚拟机,然后打开文件时依然会出现这个错误,此时是在 root 用户下,考虑到可能是权限问题导致的错误,切换到普通用户目录下,并重启了虚拟机,再次使用时就不会报错了。错误信息如下:

2020-07-16 19:55:18 5752 1

IPS镜像文件.zip

ids镜像文件

2021-05-25

VRRP实现网关冗余.rar

虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,1998年已推出正式的RFC2338协议标准。VRRP广泛应用在边缘网络中,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及即使在实际第一跳路由器使用失败的情形下仍能够维护路由器间的连通性。

2020-04-03

BGP综合实验.rar

通过BGP基本部署实现不同 AS 之间的网络通信。 根据网络拓扑进行IP地址规划,实现底层联通,并进行AS设计,运行BGP协议,实现AS之间的互联,并通告路由。

2020-03-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除