![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++/MFC
文章平均质量分 65
weiyong1999
改变思想、提升能力、不断的自我丰富,此乃人生之一大乐趣。
展开
-
SOCKET编程c/s模式(阻塞模式下的)
网络字节顺序不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低位先存),有的机器在起始地址存放高位字节(高位先存)。基于Intel的CPU,即我们常用的PC机采用的是低位先存。为保证数据的正确性,在网络协议中需要指定网络字节顺序。TCP/IP协议使用16位整数和32位整数的高位先存格式。客户机/服务器模式在操作过程中采取的是主动请求的方式。 首先服务原创 2013-03-08 23:45:08 · 3033 阅读 · 0 评论 -
网络编程笔记
1、使用PCAP_OPENFLAG_PROMISCUOUS必须#define HAVE_REMOTE,否则编译报错。pcap_open(d->name,65535,PCAP_OPENFLAG_PROMISCUOUS,1000,NULL,errorBuf)2、常用结构在windows/linux下有下面结构:sockaddr结构--------这个结构不常用一般sockaddr_ins原创 2013-04-04 13:01:19 · 568 阅读 · 0 评论 -
WinInet, WinHttp, Winsock, ws2_32的基本解释
在Windows平台进行网络程序开发, 可以使用不同的库, 但是最常用的还是微软自己开发的库。具体说来,有: (1)Winsock,工作于网络层和传输层的开发库,对于编写TCP,UDP,以及原始IP通信程序非常合适。函数原形也基本符合Unix socket标准。Windows平台上的大多数程序,如QQ,讯雷等都基于其开发。 (2)ws2_32,是Winsock的升级转载 2013-04-09 00:26:56 · 608 阅读 · 0 评论 -
MFC CArchive类的使用和数据序列化以及doc、view、frame指针的相互获取
一、Document/View结构 在MFC中,文档类负责管理数据,提供保存和加载数据的功能。视类负责数据的显示,以及给用户提供对数据的编辑和修改功能。MFC给我们提供Document/View结构,将一个应用程序所需要的“数据处理与显示”的函数空壳都设计好了,这些函数都是虚函数,我们可以在派生类中重写这些函数。有关文件读写的操作在CDocument的Serialize函数原创 2013-03-25 00:21:29 · 1108 阅读 · 0 评论 -
MFC 菜单处理及消息截获(利用虚函数的特性实现)
鼠标右键菜单: CMenu menu; menu.LoadMenu(IDR_MENU1); CMenu *popup=menu.GetSubMenu(0); ClientToScreen(&point); popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,this); CView原创 2013-03-16 22:29:43 · 1031 阅读 · 0 评论 -
MFC GDI使用实例源码、逻辑坐标系、设备坐标系及需要注意的事项
GDI类的使用需要注意的是:在创建相关的GDI对象时,如果我们使用的是MFC给定的构造函数去创建对象,那么应用程序结束后系统将自动帮我们清理该资源,但当我们使用create*相关的函数去初始化GDI对象时,我们应该确保只对该对象初始化一次且一次,否则,系统就会报错。而若要再次初始化我们应该确保改对象没有被初始化过,判断对象的m_hObject成员变量是否有值。一个让人头疼的坐标映射:W原创 2013-03-21 13:22:49 · 1031 阅读 · 0 评论 -
c语言Base64算法的实现
百科对base64的简述:Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HT原创 2013-04-05 23:13:53 · 4730 阅读 · 0 评论 -
WideCharToMultiByte和MultiByteToWideChar函数的用法
为了支持Unicode编码,需要多字节与宽字节之间的相互转换。这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读《Windows核心编程》,总结出正确的用法。WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。常用的代码页由CP_ACP和C转载 2013-04-05 15:49:34 · 430 阅读 · 0 评论 -
winpcap数据包分析
使用PCAP_OPENFLAG_PROMISCUOUS必须#define HAVE_REMOTE,否则编译报错。pcap_open(d->name,65535,PCAP_OPENFLAG_PROMISCUOUS,1000,NULL,errorBuf)#define HAVE_REMOTE#include #include "pcap.h"#include #include原创 2013-04-04 02:32:28 · 1047 阅读 · 1 评论 -
VC++ APC注入
#include #include #include #include "Winbase.h"typedef HANDLE (WINAPI *_OPENTHREAD)(DWORD,BOOL,DWORD);_OPENTHREAD OpenThread=(_OPENTHREAD)GetProcAddress(GetModuleHandle(("Kernel32.dll")),"OpenTh原创 2013-04-04 21:45:21 · 781 阅读 · 0 评论 -
MFC对话框操作及数据结构的巧妙运用
链表的巧妙用法:定义两个CButton类对象,类包含一个指向自己的指针,然后两个对象的指针分别指向对方,这样就行了一个CButton对象的链表。用心去观察你会发现MFC还多处用的数据结构的知识,你也会更加深入的了解它的工作机制。属性表单程序源码下载地址:http://download.csdn.net/detail/weiyong1999/5163600地址:MFC/WINDOW访问(原创 2013-03-19 20:10:33 · 815 阅读 · 0 评论 -
动态链接库、HOOK及windows API编程需要注意的地方
extern “C”的作用:C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。1、dll编写(使用默认的C调用约定,也没有用 extern “C”而是用了def文原创 2013-04-02 13:10:06 · 807 阅读 · 0 评论 -
函数指针和typedef
1、声明一个指向函数的指针变量 int (*fun_ptr)(int,int) 这样声明不是很直观。2、定义一个指向函数的数据类型 typedef int (*fun_ptr)(int,int); 一般是在显示加载动态链接库的时候使用原创 2013-04-02 00:51:46 · 441 阅读 · 0 评论 -
winpcap环境部署问题
Winpcap是windows平台下的一个专业Winpcap是一个强大的网络开发库,可以实现许多功能:获取可用的网络适配器;获取指定适配器信息(比如名称和描述信息);捕获指定网卡的数据封包;发送数据封包;过滤捕获的包以获取特定包等。 1. 到官网www.winpcap.org下载安装winpcap,为应用程序的运行做准备,如wireshark就需要先安装此包;转载 2013-03-10 11:48:08 · 2975 阅读 · 1 评论 -
走迷宫
一个网格迷宫由n行m列的单元格组成,每个单元格要么是空地(用1表示),要么是障碍物(用0 表示)。找出从起点到终点的最短移动序列,其中U,D,L,R,分别代表往上,下,左,右移动到相邻单元格。任何时候都不能在障碍格中,也不能走到迷宫之外,起点和终点保证是空地。n,minput:3 3 101101111output:6DDRRUU原创 2012-11-10 17:21:56 · 381 阅读 · 0 评论 -
排序算法(插入排序、shell排序、冒泡排序、选择排序、合并排序、堆排序、快速排序、计数排序、基数排序、桶排序)
排序算法分两种:1.比较排序,时间复杂度最少达到O(n*lg n),主要有:插入排序,冒泡排序,选择排序,合并排序,堆排序,快速排序等。2.非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。输入:n个数输出:输入序列的一个重排列,使a'1插入排序(有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍原创 2012-11-08 21:12:46 · 2722 阅读 · 0 评论 -
分类的信息扫描
/**分类的信息扫描算法1:1、按照分类的id顺序开始(主分类id必然在子分类的前面)2、用数组结构记录所有分类信息——为避免分类的层次过深不好寻找某分类的信息,利用类似线索二叉树的扫描方式,实现快速定位分类,一个分类关系的数组(这个是有层次的),一个是线性的数组(一维的就可以了,方便索引)。3、扫描到主的数据就添加到关系数组的顶级层4、扫描到子的数据就添加到关系数组的顶级层的原创 2013-08-05 14:46:25 · 590 阅读 · 0 评论 -
同步函数与异步函数
1. 同步函数与异步函数 什么是同步函数? 什么是异步函数? 它们在线程中执行时会对线程有何影响? 一个线程如何与一个异步执行的函数进行同步?依据微软的MSDN上的解说:(1) 同步函数:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所要做的事情全都做完了才返回。转载 2013-06-19 22:50:00 · 491 阅读 · 0 评论 -
C/C++文件输入输出操作——FILE*、fstream、windowsAPI
//myC语言对文件的操作的确是有两种方式:1、ANSI 流式文件操作,是带有缓冲区对文件句柄FILE操作的文件系统——头文件stdio.h2、POSIX I/O操作,是不带缓冲区也没有FILE——头文件unistd.h、sys/stat.h、sys/types.h、sys/fcntl.h//转载部分基于C的文件操作 在ANSI C中,对文件的操作分为两转载 2013-04-19 12:39:35 · 609 阅读 · 0 评论 -
MFC 文件操作及C、C++、win32 API对文件操作的复习和CFileDialog的使用
C语言的文件系统是带缓冲的文件系统(fflush)。注意以二进制文件和文本文件在读取上的区别(记住:对文件的操作写入方式与读取方式要保持一致)。1、当按照文本方式向文件中写入数据时,一旦遇到“换行”字符(ASCII码为10),则会转换为“回车—换行”(ASCII码分别为13,10)。在读取文件时,一旦遇到回车—换行(ASCII码分别为13,10)的组合,则会转换为换行字符(ASCII码为1原创 2013-03-23 14:05:37 · 1324 阅读 · 0 评论 -
八皇后问题(递归、非递归——回溯)
首先,让我们先来温习递归:调用前一个函数的运行期间调用另一个函数时,在运行被调用函数之前,系统需要完成3件事情:(1)将所有的实参、返回地址等信息传递给被调用函数保存;(2)为被调用函数的局部变量分配存储区;(3)将控制转移到被调函数的入口。调用中而从被调用函数返回调用函数之前,系统也应完成3件工作:(1)保存被调函数的计算结果;原创 2012-11-16 20:29:05 · 2005 阅读 · 2 评论 -
使用iphlpapi动态链接库函数实现ping功能
BOOL CAutoDlg::Ping(){ typedef HANDLE (WINAPI * pCreate)(VOID); typedef BOOL (WINAPI *pClose)(HANDLE); typedef DWORD (WINAPI *pSend)(HANDLE,IPAddr,LPVOID,WORD,PIP_OPTION_INFORMATION,LPVOID,DWORD,D原创 2013-04-11 22:56:34 · 1209 阅读 · 0 评论 -
链表的应用:计算每个作业的运行时间
问题描述在一个网络计算系统中,有很多台计算机。每台计算机分别作为一个资源,用一个由‘0’~‘9’的数字组成的字符串表示。当要计算一个任务时,网络计算系统自动从空闲的计算机中找一台,并在这台计算机上完成计算任务。每个计算任务用一个以小写字母打头、并包含有下划线字符‘_’的唯一的字符串表示。网络计算系统用一个运行日志文件记录了所发生的每个“事件”。日志文件是文本文件,每个事件占用其中的一行。共原创 2012-11-16 20:06:53 · 644 阅读 · 0 评论 -
KMP算法
KMP算法使用来弥补BF算法的不足(避免不必要的回溯)。避免的方法是由模式串决定(模式串自解),而不是又目标串决定。http://poj.org/problem?id=3461#include #include #define M 10010char strSour[M],strTarget[1000010];int next[M];int count;void ge原创 2012-11-10 22:35:33 · 275 阅读 · 0 评论 -
libpcap使用
libpcap使用libpcap是一个网络数据包捕获函数库,功能非常强大,Linux下著名的tcpdump就是以它为基础的。今天我们利用它来完成一个我们自己的网络嗅探器(sniffer)首先先介绍一下本次实验的环境:Ubuntu 11.04,IP:192.168.1.1,广播地址:192.168.1.255,子网掩码:255.255.255.0可以使用下转载 2013-03-11 00:09:01 · 725 阅读 · 0 评论 -
数字三角形 (动态规划与递归)
问题描述73 88 1 02 7 4 44 5 2 6 5上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数。输入数据输入的第一行是一个整数N (1原创 2012-11-16 20:09:24 · 647 阅读 · 0 评论 -
二叉树层次遍历
输入一颗二叉树,你的任务是按从上到下、从左到右的顺序输出各个结点的值。每个节点都按照从根结点到它的移动序列给出(L代表左,R代表右)。在输入中,每个结点的左括号和右括号没有空格,相邻节点之间用一个空格隔开。每棵树的输入用一对括空括号()结束(这对括号本身不代表一个结点),如图所示:注意,如果从根节点到某个叶子结点的路径上有的结点没有输入中给出,或者给出了超过一次,应当输出-1,。结点个数不超过原创 2012-11-08 21:32:39 · 911 阅读 · 0 评论 -
几种常用数据包结构体
/*以太网帧头格式结构体 14个字节*/typedef struct ether_header{ unsigned char ether_dhost[6]; unsigned char ether_shost[6]; unsigned short ether_type;}ETHERHEADER,*PETHERHEADER;/*以ARP字段结构体 28个字节*/typedef str原创 2013-03-10 21:26:00 · 3067 阅读 · 2 评论 -
数组和指针——都是“退化”惹的祸
1. 什么是数组类型?下面是C99中原话:An array type describes a contiguously allocated nonempty set of objects with aparticular member object type, called the element type.36) Array types are characterized by转载 2013-04-02 00:46:56 · 418 阅读 · 0 评论 -
MFC/WINDOW访问(设置)控件内容及句柄的常用的方法和自定义消息方法
一、内容1.GetDlgItem(编辑框ID)->GetWindowText 或直接用GetDlgItemText2.给编辑框关联字符串变量 假如叫m_sEdit 用的时候先UpdateData();m_sEdit的内容就是编辑框里的内容了3. 给编辑框关联控件变量 假如叫m_cEdit 用m_cEdit.GetWindowText 也可以4.SendMessage发WM_GET原创 2013-03-11 20:57:53 · 1794 阅读 · 0 评论 -
进程间通信(剪切板、匿名管道、命名管道、邮槽)
四种常见通信方式:剪切板 (本地机器上的进程通信)匿名管道 (只有在父子进程之间,且父进程的安全标识必须是可以继承的)命名管道(没有要求,可本地间的、网络间的进程通信)邮槽 (没有要求,可本地间的、网络间的进程通信,不过客户端程序只能发送数据,服务器端只能接受数据)原创 2013-03-14 22:49:55 · 676 阅读 · 0 评论 -
字母重排
输入一个字典(用******结尾),然后再输入若干单词。每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:()。输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成。注意,字典中的单词不一定按字典序排列。样例输入:tarp given score refund only trap work原创 2012-10-28 23:33:56 · 717 阅读 · 0 评论 -
火柴问题
现有21根火柴,两人轮流取,每人每次可取走1- 4根,不可多取,也不能不取,谁取最后一根火柴则谁输。请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一方为“常胜将军”。要求程序运行效果如下图(融智技术学院)。 #include int main(){ printf("*turn.Each one each time takes 1 to 4 sticks.*\n原创 2012-11-03 15:24:29 · 1486 阅读 · 0 评论 -
卡片游戏
Description桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n。当至少还剩两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后。输入n,输出每次扔掉的牌,以及最后剩下的牌。 Input第一行为一个整数t(0Output为每个测试用例单独输出一行,该行中依次输出每次扔掉的牌以及最后剩下的牌,每张牌后跟着一个空格。原创 2012-11-02 19:54:52 · 633 阅读 · 0 评论 -
铁轨问题
某城市有一个火车站,铁轨铺设如图所示。有n节车厢从A方向驶入车站,按进站顺序编号1~n。现让这些火车按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢,可以借助中转站C。C是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出C。对于每个车厢,一旦从A移入C,就不能再回到A了;一旦从C移入B,就不能回到C了。换句话说,在任意时刻,只有两种选择:A→C和C→B。原创 2012-11-02 21:07:16 · 4496 阅读 · 1 评论 -
因子和阶乘
描述给你一个正整数n,把n!=1x2x3x.....xn分解成素因子相乘的形式,并从小到大输出每个素因子的指数,但要保证最后输出的素因子个数不为0。例如825应表示为0,1,2,0,1表示分别有0,1,2,0,1个2,3,5,7,11。输入第一行有一个整数n(0接下来n行每行有一个整数 m(1输出从小到大输出m分解成素因子相乘后各个素因子对应的指数样例输入2原创 2012-11-02 01:33:30 · 498 阅读 · 0 评论 -
Cantor的数表
题目描述如下数列,前5项分别是1/1,1/2,2/1,3/1,2/2……。输入n,输出第n项。1/1 1/2 1/3 1/4 1/52/1 2/2 2/3 2/43/1 3/2 3/34/1 4/25/1样例输入314712345样例输出2/12/原创 2012-11-02 01:30:15 · 730 阅读 · 0 评论 -
二维数组和二级指针的传递问题
华为的一个面试题就考了这个方面的。借那道华为的面试题引出问题,题目:char **p, a[16][8]; 问:p=a是否会导致程序在以后出现问题?为什么?可能有一部分朋友会回答正确,这里他们认为,a[]是一级指针,a[][]就是二级指针。那这个到底对不对呢?OK,用事实说话:// Author: Tanky Woo// Blog: www.WuTianQi.转载 2012-11-01 16:30:19 · 396 阅读 · 0 评论 -
C语言习题练习集锦
1.开灯问题--------------->涉及两个对象:灯和人。倍数问题可以判断余数(灯%人)。2.蛇形填写--------------->填数前应该进行检查,以防后悔。3.坚式问题--------------->4.最长回文子串#include #include #include #define MAX 5000char strStart[MAX+10],str原创 2012-10-12 12:11:40 · 816 阅读 · 0 评论 -
C语言宏定义使用技巧
C语言宏定义使用技巧写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H //头文件内容#endif2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数转载 2012-10-11 23:40:26 · 1150 阅读 · 0 评论