- 博客(46)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 C/C++ struct和typedef struct的区别
在C中:Student为标识符类似于变量名、函数名;struct Student为结构体类型;Stu1为结构体变量#include <stdio.h>#include <stdlib.h>struct Student { int a; //Student为标识符类似于变量名、函数名;struct Student为结构体...
2019-10-24 21:03:31
464
原创 加载dll动态库时LoadLibrary与LoadLibraryEx的区别
若DLL不在调用方的同一目录下,可以用LoadLibrary(L"DLL绝对路径")加载。但若被调DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是用LoadLibraryEx:LoadLibraryEx(“DLL绝对路径”, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);通过指定LOAD_WITH_ALTERED_SEARCH_PATH,让系统DLL搜索顺序从DLL所在目录开始。...
2021-05-14 10:35:56
742
原创 MFC中定时器OnTimer()的使用
在MFC中我们可能需要定时读写数据或是更新状态,这时候就需要用到定时器,其实现函数是OnTimer(),下面对其用法做一些简单的介绍(基于VS2015)1、在工程的类视图中点击需要使用定时器的对话框类,在属性窗口中选择消息,在下面的消息函数中选中WM_TIMER,后面下拉框选择添加OnTimer函数,如下图所示:添加完毕后会在CxxxDlg.cpp中自动添加OnTimer(UINT_PTR nIDEvent),如下图之后就可以在OnTimer函数中进行相应的处理了。OnTimer的.
2021-03-17 14:10:56
9111
2
原创 C/C++ 获取当前进程工作目录GetCurrentDirectory()以及设置当前进程的工作目录SetCurrentDirectory()
GetCurrentDirectory()获取当前进程工作目录SetCurrentDirectory()切换当前进程的当前工作目录。头文件:#include<Windows.h>函数原型:DWORDGetCurrentDirectory(DWORDnBufferLength, // size of directory buffer 缓冲区的长度LPTSTRlpBuffer // directory buffer 指定一个预定义字串,用于装载当前目录);...
2021-01-09 11:33:19
7968
2
原创 C/C++获取特殊路径函数SHGetSpecialFolderPath()
SHGetSpecialFolderPath函数检索由其CSIDL标识的特殊文件夹的路径。所在头文件#include <shlobj.h>#pragma comment(lib, "shell32.lib")函数原型:BOOL SHGetSpecialFolderPath( HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate);参数:hwndOwner:如果显示对话框或消息框,窗口的句.
2021-01-09 09:30:35
2819
原创 读写注册表信息
1.简介:注册表是为Windows NT和Windows95中所有32位硬件/驱动和32位应用程序设计的数据文件,用于存储系统和应用程序的设置信息。16位驱动在Winnt (Windows New Technology)下无法工作,所以所有设备都通过注册表来控制,一般这些是通过BIOS(基本输入输出系统)来控制的。在Win95下,16位驱动会继续以实模式方式设备工作,它们使用system.ini来控制。16位应用程序会工作在NT或者Win95 下,它们的程序仍然会参考win.ini和system.ini
2020-11-04 15:21:45
438
原创 IP地址的三种表示方式是什么
IP地址的三种表bai示方式是点分十进制、网络字du节序、主机字节序。域名如zhi“ www.baidu.com”并不是IP地址的表示方式,“dao192.168.0.1”属于点分十进制。1、点分十进制点分十进制(Dotted Decimal Notation)全称为点分(点式)十进制表示法,是IPv4的IP地址标识方法。IPv4中用四个字节表示一个IP地址,每个字节按照十进制表示为0~255。点分十进制就是用4个从0~255的数字,来表示一个IP地址。如192.168.1.1。2、网络字节
2020-10-23 15:06:09
13146
原创 VS2015如何在工程属性中添加静态库文件
1、添加头文件所在目录:项目属性--->配置属性--->C/C++--->常规--->附加包含目录2、添加静态库所在目录:项目属性--->配置属性--->链接器--->常规--->附加库目录3、添加静态库:项目属性--->配置属性--->链接器--->输入--->附加依赖项windows平台下编程大多数会添加ws2_32.lib这个库#pragma comment(lib,"ws2_32.lib")该库对应ws.
2020-08-08 14:05:52
792
原创 指向常量的指针、常量指针(常指针)、指向常量的常指针三者的区分
一、指向常量的指针从名称上看简单理解:一个指向常量的指针变量(即指针所指向的值不可修改),但可以更改指针所指向的地址。定义:const int *p或者int const *pint main(){ int a = 10; int b = 15; int const *p; p = &a; //*p = 20; 报错,不可修改指针所指向的值 p = &b; //通过,可修改指针所指向的地址 cout << *p << endl; s
2020-06-23 17:00:18
3228
2
原创 VS2015使用查找功能只显示统计信息,没有查找结果明细的问题解决
在VS2015使用查找功能只显示统计信息,没有查找结果明细。解决方法:在注册表中查找:HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32,发现默认值被设置为NULL;在这里填入C:\\Program Files (x86)\\Common Files\\mic...
2020-02-11 10:12:08
1123
2
原创 GetPrivateProfileString、GetPrivateProfileInt对.ini配置文件的读写
GetPrivateProfileString()函数原型:DWORD GetPrivateProfileString( LPCTSTR lpszSection, LPCTSTR lpszKey, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileNam...
2019-12-31 16:19:59
1141
转载 C++常用的文件操作路径函数
shlwapi.dll中的实用API函数发布在windows system目录下有这个动态链接库BOOL PathFileExists(LPCTSTR lpszPath)功能:检查文件/路径是否存在LPTSTR PathFindFileName(LPCTSTR pPath)功能:获得路径中的文件名例如: PathFindFileName( “c:\\Program Fi...
2019-12-24 14:00:28
1449
转载 C语言总结—概述、算法
C语言总结第一章、C语言概述格式特点结构特点函数与主函数函数的组成程序语句注释预编译处理命令32个关键字:(由系统定义,不能重作其他定义)9种控制语句:34种运算符:数据类型第二章、算法算法的特性三种基本结构和改进的流程图顺序结构选择结构循环结构当型结构直到型结构结构化程序设计方法第一章、C语言概述格式特点习惯用小写字母,大小写敏感不适用行号,无程...
2019-12-23 14:51:36
185
原创 指针和数组的地址运算问题
指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算:ptr++在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 个字节。这个运算会在不影响内...
2019-12-12 10:54:34
427
原创 利用随机数抢红包
#define _CRT_SECURE_NO_WARNINGS#include "iostream"#include "time.h"#include "iomanip"#include "math.h"using namespace std;int main(){ int i, number; int bestMoney; //手气最佳的人 float tota...
2019-12-09 15:02:01
422
原创 输入输出大小写字符(putchar和getchar的使用)
要求:输入大写字符,输出相对应的小写字符,例如输入A,输出a 输入小写字符,输出相对应的大写字符,例如输入m,输出M。#define _CRT_SECURE_NO_WARNINGS#include "iostream"using namespace std;int main(){ cout << "输入大写字符:"; char a = ge...
2019-12-05 17:01:30
4111
原创 C++程序密码输入回显*
_getch()函数的作用是获取按键信息,且该函数在conio.h中定义。_getche()函数与_getch()函数函数类似,其作用也是获取按键信息,并且也是在conio.h中定义。_getch()函数不会在控制台中显示按键信息。_getch()函数是一个阻塞函数,直到有字符输入时才会返回,所以该函数不会返回错误值。#define _CRT_SECURE_NO_WARNINGS#inc...
2019-11-25 14:00:22
1194
原创 C/C++中几个常用的库函数
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。1.int/float to string/array:C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。● itoa():将整型值转换为字符串。● ltoa():将长整型值转换为字符串。● ultoa():将无符号长整型值转换...
2019-11-12 19:40:11
2279
原创 #pragma once与 #ifndef的区别
为了避免同一个文件被include多次可以用以下两种方法:1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,虽然二者并没有太大的区别,但是两者仍然还是有一些细微的区别。方式一:#ifndef __SOMEFILE_H__ //文件名#define __SOMEFILE_H__... ... // 声明语句#endif方式二:...
2019-11-08 14:56:57
168
原创 VC++调试错误的解决方案
这篇文章主要用来记录使用Visual Studio过程中,出现的各种error,并提供自己当时解决的方案。但是,一个error可能由不同原因引起的,文中案例仅供大家参考。 nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 解决:将工程设置为Using MFC in sta...
2019-11-08 14:52:18
3338
原创 VS的工作目录和输出目录
C+ +项目,解决方案总文件夹下就只包含解决方案配置文件sln和一个项目总文件夹和一个Debug文件夹以及一个Release文件夹(共四个东东,其中Debug和Release文件夹中存放最终生成的结果exe或dll,要注意如果不使用Release生成,则不存在Release文件夹),而项目总文件夹下包含C++源文件头文件、项目配置文件和一个Debug文件夹以及一个Release文件夹(一定要注意,...
2019-11-08 14:41:07
518
原创 MFC 下拉列表框的设置
MFC:MFC(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries)以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。MFC是WinAPI与C++的结合。API,即微软提供的Windows下...
2019-11-06 11:04:43
8887
原创 C++异常处理
异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw。throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。 catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。...
2019-10-30 17:02:13
189
原创 C++中cin.getline()和cin.ignore()函数
getline()函数:getline()函数是一个比较常见的函数。根据名字直接望文生义,就知道这个函数是来完成读入一行数据。getline是C++标准库函数;但不是C标准库函数,getline会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。在C++中本质上有两种getline函数:...
2019-10-30 16:35:51
1588
原创 C++文件和流
到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。这里我们说一下C++ 中另一个标准库 fstream,它定义了三个新的数据类型:数据类型 描述 ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 ifstream 该数据类型表示输入文件流,用于从文件读取信息...
2019-10-30 15:47:12
255
原创 题目:求年龄
网友年龄某人新认识一网友。当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”请你计算:网友的年龄一共有多少种可能情况?实例:30岁请填写表示可能情况的种数。代码:求100以内的情况int main(){ int count = 0; int number[2] = { 0 }; int j...
2019-10-29 10:58:17
213
原创 数据结构—队列queue
队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是有序集合,新添加的一端为队尾,另一端为队头,当一个元素从队尾进入队列时,一直向队首移动,直到它成为移除的元素为止。这种排序是先进先出FIFO,生活中常见的例子就是去学校...
2019-10-29 10:02:19
291
原创 数据结构—双向链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,时间复杂度为O(1)。双链表具有以下优点:1、删除单链表中的某个结点时,一定要得到待删除结点的前驱,得到该前驱有两种方法,第一种方法是在定位待删除结点的同时一路保存当前结点的前驱。第二种方法是在定位到待删除结点之后,重...
2019-10-28 16:57:01
2991
原创 数据结构—单向链表
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点。相比较普通的线性结构:(1)单个结点创建非常方便,普通的线性内存通常在创建的时候就需要设定数据的大小(2)结点的删除非常方便,不需要像线性结构那样移...
2019-10-26 11:22:35
164
原创 数据结构—线性表
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列,每个数据元素可能会有多个数据项。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,...
2019-10-25 13:41:35
185
原创 如何使用VS2015 联合调试C++ dll
dll工程设置:首先先将dll写好,并设置输出目录dll工程:属性-配置属性-常规-把输出目录设置为 调用该dll的exe工程的目录下dll工程:属性-配置属性-链接器-常规-把输出文件也设置为调用该dll的exe工程的目录下dll工程:打开属性—配置属性—调试把 命令 改为 调用该dll的exe工程的工作目录也设置为exe所在目录。如下图所示...
2019-10-24 13:54:42
730
原创 求两个字符串最大公共子字符串长度并输出
求两个字符串最大公共子字符串长度并输出:1.常用方法:代码如下:#define _CRT_SECURE_NO_WARNINGS#include "iostream"#include "string"#include "algorithm"using namespace std;int commonStrlen(string s1, string s2){ if (s...
2019-10-24 11:01:15
1568
1
原创 简单谈谈设计模式
1.什么是设计模式?设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一般。2.设计模式分类:设计模式遵循如下几种单一职责,开放-封...
2019-10-24 08:21:22
107
原创 设计模式—工厂模式
1.什么是工厂方法模式?定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。2.工厂方法模式与抽象工厂模式的区别工厂方法通常只是创建一个产品等级,而抽象工厂则是创建多个产品等级的,工厂...
2019-10-23 16:53:22
213
原创 string类型转int类型
String类型转int类型C语言形式:int main(){ string str = "123"; int i = atoi(str.c_str()); cout << i << endl; system("pause"); return 0;} C++形式:int main(){ string str = "123"...
2019-10-23 15:27:41
209
原创 C 多态总结
1、多态的实现三个条件:(1)要有继承(2)要有虚函数重写(即动态绑定)(3)至少有一个基类类型的指针或基类类型的引用。这个指针和引用可以对virtual成员函数进行调用C++的多态性分为两种:编译时的多态、运行时的多态; 使用重载来实现编译时的多态,使用虚函数来实现运行时的多态。2、基类中的虚函数必须要实现吗?(1)在main函数中,如果有基类或者派生类的实例对象,...
2019-10-23 13:37:50
1694
原创 轻松理解SDK和API以及其区别
API:概念:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。其实就是调用已经写好的可以实现特定功能的函数,你根据它提供好的接口,传入它规定的参数,就可以调用这个函数帮你实现特定的功能。例子:别人写好了一个数...
2019-10-21 10:41:11
1147
原创 当模板函数遇上同名的非模板函数时,该如何调用
当模板函数与同名的普通函数重载时,其调用顺序是怎样的呢?让我们实验一把,看一看它的调用顺序:示例代码如下:#include "iostream"using namespace std;void mySwap(int a, char b) { cout << "a:" << a << " " << "b:" << ...
2019-10-18 14:59:49
1601
原创 为什么含有纯虚函数的类,不能定义类对象
为什么含有纯虚函数的类,不能定义类对象?先从反面来讲:如果含有纯虚函数的类可以定义对象,那么该对象就应该可以调用类中的纯虚函数,但是纯虚函数是没有实现的,这就是个矛盾的。正面来讲:普通类具有成员函数,构造类的对象时,会对成员变量和成员函数分配内存。含有纯虚函数的类,定义了成员函数的地址是空,无法分配内存,该成员函数对类是没有意义的,失去了普通类的数据和方法绑定于同一对象中的意义,因此...
2019-10-16 10:07:30
4252
原创 C++中求string类型字符串的长度的方法
在代码中经常会求字符串的有效长度,对char型字符串数组大家会用strlen来求它的有效长度,如何求string类型字符串的有效长度呢?这里有三种方法。(1)使用string的成员函数length();这里获取的即为字符串的有效长度。#define _CRT_SECURE_NO_WARNINGS#include "iostream"#include "string"using ...
2019-10-14 15:31:00
33199
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人