自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 C/C++编辑注册表实现文件与程序的关联

关于注册表关联程序的一些C++代码

2022-12-29 15:46:12 368 1

原创 几种排序备忘(更新中...)

选择排序:每次找出剩下数据中最大或最小的数插入排序:把当前数据找到合适的位置插入,当前位置和这个位置中间的数据都往后挪了一位

2021-08-11 09:21:50 111

原创 关于数据对齐以及地址的一些总结

接触到数据对齐大多是在学习结构体的时候 例如:struct S_1{ char a; int b; double c;};上面S_1结构体定义了含有三种数据类型的一个结构,按以往的想法数据长度应该是char的长度加上intd的长度再加上double的长度即 1 + 4 + 8 = 13;但事实上并不是,每个数据存放的地址是他本身大小的倍数,所以char类型任何地址都可以,地址的最小单位就是字节, int就要以4的倍数来存储, double以8的倍数来存取,不够的要以空白

2021-04-29 16:41:02 453

原创 关于Visual Studio编辑项目时出现 MFC: RC 4005: PWR_FAIL:redefinition问题及解决办法

MFC: RC 4005: PWR_FAIL:redefinition这句话意思是重定义了,可能是VS版本与之前项目编写时不一样了,也可能是不经意加了一些其他头文件之类的。中间的PWR_FAIL是重定义的部分,不只有 PWR_FAIL 也可以是HTERROR 也可以是HTTRANSPARENT 等等;我解决的这个问题是打开资源视图时出现的,所以我默认是Resource.h中的问题,如果是进行其他操作时请自行分析。解决方法:打开Resource.h文件查找提示的重定义部分,注释掉这一定义然后保存一...

2021-04-29 14:11:51 1435

原创 串口通信与全双工、半双工、单工

单工:通信双方只能单向传输 即任何时间都只能A---- >B不能B----->A 半双工:同一时刻只能单向传输,但是可以A--->B也可以B---->A全双工:同一时刻通信双方可以双向传输把上述的概念放到串口通信中(I²C以及SPI)其它的不了解1、无论是I²C还是SPI都不是单工的,应为他们都有收发数据的功能2、SPI通信是全双工的,I²C是半双工的3、SPI是有数据接收线和数据发送线的 两条数据线,也就是说它有两根线是专门用来传输数据的,这两根线...

2020-05-19 16:44:32 6317

原创 I²C(易混淆点备忘)

1、两个概念:发送端与接收端;主机与从机;主机(master)与从机(slave)既可以作为发送端也可以作为接收端2、空闲状态高电平(上拉电阻),也就是说I²C无论主机、从机都有拉低数据总线(SDA)的能力3、时钟信号线一直由主机掌握,无论作为接收端还是发送端4、起始信号:SCL高电平,SDA由高变低;结束信号:SCL高电平,SDA由低变高;SCL:时钟信号线 SDA:数据线5、ACK是低电平,NACK是高电平;ACK代表收到,NACK代表没有应答除了读模式(主机收到数据后把SDA线拉高..

2020-05-18 17:45:37 1266

原创 I²C的一些常识

至于起源什么的百度或者其他都能介绍的很详细。 IIC总线是一种串行数据总线,IIC主要有两条线,时钟线SCL和数据线SDA。通常IIC空闲时线路电平为高,主要依靠外部上拉电阻来控制,也就是说启动IIC通讯模式之后数据线和时钟线默认是拉高的。 当时钟线保持高电平数据线从高变低是起始信号,意味着主设备准备好通讯了;需要注意的是起始信号过后两条线都会被拉低因为要为收发数据做准备。总线...

2019-12-30 09:29:25 2672

原创 MFC出现的“灾难性故障的问题”和“扩展程序提供程序未能为该对象返回扩展程序问题”

先描述一下我的问题:用的是vs2017中的mfc,在对控件习惯性的右键>>添加变量 时出现了上述问题。最近在使用MFC进行界面UI设计时忽然出现标题中的问题,我记得除了新添加了几个slider控件之外没有任何其他的操作,然后就是上网上去找,花了一天时间,相关方面的信息是真少,基本上把网上的所有方法都试了一遍,结果仍然是没有什么用。网上几种办法应该能解决绝大多数出现这个问题的人,但...

2019-08-20 17:15:47 4071 3

原创 MFC

用Windows进行C/C++开发是要比Linux下复杂一点当然功能也多一点。用vs写代码多多少少出现或遇到过Unicode的问题,我看了网上的解释,ascll表中的字符也就是以前的字符全部都是单个字节的字符,所以ansi编码是万能的,后来出现的汉字一个汉语字符占两个字节这就会出现一些乱码,后来为了统一就出现了Unicode编码,他把所有的单个字符变为两个字节长度,里面有个定义 typedef u...

2019-08-12 09:43:13 223

原创 关于extern关键字的备忘录

首先c/c++中有声明和定义的区别,其实我觉得可以加上一个初始化的概念防止混淆。 比如:int a;这句语句就是定义即使它没有被初始化,当然位置不同它是有默认值的(全局变量好像默认是0,局部变量就是乱码); 又比如:int a = 0;这句语句是对a进行了初始化的定义,也算是定义,那么什么才是声明呢? 在普通的.cpp文件中,加了extern 并且没有对变量...

2019-07-29 10:56:57 137

原创 关于vs2017编译时出现的Unicode的问题

用vs编译某个项目时,通常是已有的项目,或者是以前用版本较低的vs编写的项目,有时会报错,或者是警告。解决办法:把出现问题的文件可能是某个源文件(.cpp文件)在文件夹中找到,用系统自带的记事本的方式打开,另存为自己的目录下把编码改为需要的就行如Unicode格式。另外我用的是win7。...

2019-07-25 13:33:08 2965

原创 I²C起始条件和停止条件

当时钟线SCL保持高电平,SDA数据线从高到低,此时达成I²C达成起始条件;当时钟线SCL保持高电平,SDA数据线从低到高,此时达成I²C达成停止条件;I²C只有两条线,一条数据线SDA,一条时钟线SCL。...

2019-07-18 09:48:42 1418

原创 I²C

i2c式设备与设备之间通信的一种方式,它有两根线:串行数据线SDA和串行时钟线SCL,每个设备识别的方式是他们的地址,根据设备的功能,既可以做发射机,也可以做接收机。在数据传输时设备是被默认成主从模式,主设备是在总线上启动数据传输的设备,此时所有寻址的设备都是从设备。...

2019-06-26 11:12:43 1675

原创 关于Qt中几个常见控件及常用的函数

在使用Qt时,现在一般都是在“设计”中拖动控件,一般常用的有pushbutton,label,lineEdit,textEdit,combox等。pushbutton就很少的去设置什么属性,一般直接转到槽,编写槽函数也就是当做一个跳板执行函数体内操作。label一般在拖控件的时候就把需要显示的字打上去了,而且运行程序后界面中的label默认的不能修改。lineEdit与textEdit...

2019-06-13 16:49:27 2585

原创 Qt学习

想学Qt的强烈建议Qt学习之路2

2019-06-11 10:38:27 141

原创 关于fwrite 读写出现多余字节的问题

近几天,老师给我布置了一个任务,完成把.prn 文件中有效字节片段取出来转化成为pdf格式。其他的都较为简单,主要就是我在用c代码完成提取片段后莫名其妙写到文件中之后多了0d这个字符,这个问题困扰了很久。问题是在于我用fwrite函数打开文件时没有加上二进制打开方式“b”的这个方式打开,用的是w+,正确代码应该是fopen("路径.prn", wb+");因为如果没有用二进制形式打开文...

2018-12-24 16:29:32 3276 5

原创 进程间操作 raise 与 kill

首先进程间进程间操作有raise和kill两种函数。他们的函数原型分别是:int kill(pid_t pid, int signal);int raise(int signal);成功返回0,失败返回-1kill和raise是用来发送信号的:kill把信号发送给进程或进程组;raise把信号发送给(进程)自身.raise = kill(getpid(), sign...

2018-10-08 17:43:50 352

原创 进程间的操作

 vfork 函数创建子进程时永远是子进程先执行,父进程后执行,并且子进程必须要指定退出方式即exit(1);用fork来创建进程时子进程与父进程随机执行,所以要避免子进程成为孤儿进程就需要一个函数wait(&status)这样就能保证父进程比子进程晚结束。僵尸进程:子进程结束之后没有被父进程回收孤儿进程:父进程先死子进程却没有结束;#include <stdio....

2018-08-17 19:21:46 214

原创 通讯录3.0 (包含文件保存与读取)

#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>#include <sys/types.h>#include <string.h>#define BLACK

2018-08-16 19:39:57 215

原创 用栈和队列实现停车场

声明两个栈一个是停车栈一个是让路栈,当停车栈存满时,自动进入等候队列。当车进入停车场和离开停车场时都分别记录下时间,保存在栈和链表中,用链表去保存完整的信息。该项目有三个难点:1、出车时,也就是当车需要出去时需要通过让路栈实现出车。原理是要出中间某个元素就把这个元素之上的所有元素依次出栈并压入让路栈,然后保存一下时间并把他的所有信息保存到链表之中。最后把让路栈中的元素在出栈并压入原有栈中。此时需要...

2018-08-15 20:55:40 1144 2

原创 两种文件操作

Linuxc中读写文件都是用的文件I/O模式,C语言也就是c库中用的是标准I/O模式,区别在于前者是直接对磁盘进行操作,后者是先保存大缓冲区中,针对流操作的。今天代码如下:功能是实现cp也就是Linuxc下的复制操作#include<stdio.h>#include <sys/types.h>#include <sys/stat.h>#inc...

2018-08-13 21:26:55 159

原创 八大排序-堆排序

重点主要在于调整函数,其中的for循环:for(tmp = a[pos]; 2*pos + 1 < len;  pos = child)   它不是一次循环,而是每次进入这个循环之后,只要有交换过的非叶子节点都会再一次循环。#include <stdio.h>void AdjustMinHeap(int *a, int pos, int len){ int temp...

2018-08-12 20:53:27 141

原创 链式队列

链式队列由队列指针,和各个节点组成。链式队列含有头结点。初始化的的代码如下:int queueinit(Q **q){ (*q) = (Q *)malloc(sizeof(Q)); // 先给队列指针分配空间 if((*q) == NULL) { return FAILURE; } Node *p=(Node *)malloc(sizeof(Node)); //新建一个头结...

2018-08-10 20:21:44 231

原创 用队列实现杨辉三角

今天先敲了一遍循环队列,理解之后写了杨辉三角。我用的算法是建两个队列,然后给第一个队列插入 0 1 0(这边解释一下为什么插入的是 0 1 0而不是1,主要是一个数据不好写循环语句;因为杨辉三角每一行要比前一行多一个数据,第一行1个,第二行2个,如果是单一个数据1,后面没办法实现加一因为根本没有两个数据可以加,如果是0 1 0,那么第一个是0直接置入,第二个就是0 + 1 = 1,后面一个就是...

2018-08-09 22:46:02 1542 1

原创 用栈实现计算器

我们平时用swith语句写的计算器,只能处理简单的两个操作数和一个运算符,这样其实和日常应用方面差的有点远,所以我们今天学习了一种用栈来实现一条复杂运算式的计算。这个需要用到栈的相关知识,除此之外我们还需要学会如何把中缀转换成后缀表达式,比如:3+(4+5*2)-3这样一个表达式,从左至右遇到操作数压入栈1,遇到操作符压入栈2,当栈2的栈顶元素为空或者栈顶为‘(’ 时无脑压进栈,遇到右括号‘)’时...

2018-08-08 20:43:39 1834

原创 链表实现通讯录

#include<stdio.h>#include<stdlib.h>#include<string.h>#define BLACK "\e[0;30m"#define L_BLACK "\e[1;30m"#define RED "\e[0;31m"#defi..

2018-08-07 20:09:11 286

转载 中缀和前缀表达式

中缀与前缀表达式:首先他们都是表达式的一种记忆方法,区别在于运算符与操作数的相对位置的不同,前缀表达式的运算符位于与其相关的操作数之前,中缀在操作数之间,后缀就是位于操作数后面的意思。比如: 2 + 3  *5 - 4    是中缀表达式            +   -  * 3 5 4  2  是前缀表达式            3 5 * 2 + 4 -      是后缀表达式...

2018-08-06 21:14:08 384

原创 无头结点的链表实现

链表的插入(任何位置):int Link1Insert(Node **l, int p, int e){ int i = 1, count = 1; if((NULL == *l) && (p == 1)) { (*l) = (Node *)malloc(sizeof(Node)); (*l)->next = N...

2018-08-05 20:00:51 450

原创 链表基本操作

链表的定义:struct Link{ int data; struct Link *next;};链表和顺序表区别就在下面的*next,这是指向下一个结构体的,里面存放的是下一个结构体的地址。初始化链表(含头结点)int LinkInit(Node **s){ *s = (Node *)malloc(sizeof(Node)); if(*s...

2018-08-04 21:30:32 161

原创 数据结构学习总结

线性表是一种逻辑结构分为顺序表和链表,而顺序表和链表是两种存储结构。顺序表和链表的区别:顺序表的地址是连续的,即相邻的元素之间地址连续,存储方式是连续存储方式,而链表是一种链式存储方式。共同点是:它们元素个数都有限,而且逻辑上元素有先后次序,数据类型相同。顺序存储方式:使用数组实现,一组地址连续的存储单元,大小分配分为两种。一是 静态分配;二是动态扩展;与数组的区别在于数组是用的下标法...

2018-08-03 20:58:19 228

原创 通讯录完善版

历时几天的通讯录总算是告一段落了,可能有些地方没有达到最好的效果,不过逻辑还算完整,基本不会出现什么bug;  #include<stdio.h>#include<stdlib.h>#include<string.h>#define BLACK "\e[0;30m"#define L_BLACK ...

2018-08-02 20:04:13 183

原创 通讯录的基本功能的实现

#include<stdio.h>#include<stdlib.h>#include<string.h> # define size 1000int count = 0;int number;struct person { int no; char name[20]; int age; char sex[10]...

2018-07-31 23:15:16 863

原创 关于malloc()及内存的一些理解

今天尝试写了一下通讯录,过程中发现了一些问题。我们用的是结构体指针数组,结构体指针数组其实就是指针数组。它的元素是一群指向结构体数组元素地址的地址。先看一下定义吧:struct person{ int num; char name[20];};int main(){ struct person *p[10] = (struct person*)malloc...

2018-07-30 22:49:54 615

原创 指针、数组、结构体

const 修饰只读变量,用法如下几种:1、const int p;2、int *const q;3、int const *z;4、const int *a;5、const int * const b;第一个 是把p定义为一个只读变量,p的值不会改变,但是可以通过地址改变里面内容的值,但是不能通过p来修改对应内存的值;第二个是给指针q做了只读修饰,效果是q不能变,q原本是什么...

2018-07-29 20:54:08 305

原创 关于指针的一些看法

这几天复习了指针、数组、函数,所以联系起来可能比较混乱;不多说先上几个例子:#include<stdio.h>#include<string.h>#include<stdlib.h>void contri(char *str) // 这是一个给字符指针分配空间的子函数{ str = (cha...

2018-07-28 21:27:39 156

原创 学习心得

函数指针:格式形如 int (*p)(形参数据类型);相当于定义了一个指针指向了一个函数,在主函数中调用如下:void print(int x, int y);int main(){ int a, b; char (*p)(); //定义了一个函数指针; p = print; // 把print函数地址赋给p; p...

2018-07-27 20:32:19 156

原创 指针数组结构体

今天复习了一下指针与数组,结构体的一些内容。指针数组:是一个数组里面元素全是指针即地址,所以改变里面的元素要想操作指针一样,指针数组元素用之前应当进行初始化,不然编译时容易出现段错误;打印数组指针就是打印元素当前指向的地址内的内容。例如: char*str[10] = {"i", "am","from", "shanghai"}; int i;for(i = 0; i <...

2018-07-26 20:13:08 164

原创 static 宏函数 指针

static的两个要点:1、修饰全局变量时,改变变量的作用域,不能被其他文件调用这能被当前文件调用;2修饰局部变量时可以改变变量周期,知道程序结束时才释放栈空间,被static修饰的局部变量存放在静态数据区。printf()这个函数用的时候最好都加上\n换行,因为\n不仅有换行的作用,还有刷新缓冲区的作用;或者用完之后用fflush(stdout)函数。头文件中#include<st...

2018-07-25 19:31:47 312

原创 字符串及数组的相关算法

1、输入一串字符,在指定的位置插入一个字符: 4 main() 5 { 6 int i, p, length; 7 char c, a[20], b[100] ={'0'}; 8 printf("please input address:\n "); 9 scanf("%d",&p); 10 getchar(); 11...

2018-07-24 20:37:20 300

原创 7.23 学习日报

一维数组:格式 int  a[10] ;注意初始化数组之后机器会给数组分配地址空间,比如a[0]地址为 0x100,则a[1]为0x104 a[2]为0x108以此类推,其实里面的0x100,0x104与我们平时理解的还不一样他不是简单的‘位’,而是以字节为单位的,因为是用int来声明的所以元素之间相差4字节,并且低位的一定是a[0]。另外定义一个变量时 比如 int  b = 10;也是四个字节...

2018-07-23 20:45:20 119

空空如也

空空如也

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

TA关注的人

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