C/C++
Matrix_Designer
专注: ArmLinux/.NET开发
展开
-
学生成绩管理系统(1)
本系统由edt.c、file.c、find.c、obf.c、pcgate.c、MAIN.C组成,现在给出所有源码。 <br />/*edt.c*/ <br />struct _stu *_find(struct _stu *p2,char *a)/*查找数据*/ <br />{int c; <br />void *p=malloc(10); <br />struct _stu *p1=(struct _stu *)malloc(sizeof(struct _stu原创 2010-10-06 09:08:00 · 694 阅读 · 0 评论 -
最小树形图
<br />最近在考虑用实时P2P实现多播,提供优先权服务。感觉越想越复杂,头疼。找了点资料,先记下。<br /><br />最小树形图 (转载)<br />2008-08-30 16:59<br />最小树形图前 几天为了UVa的一道题不得不重写了一个最小树形图O(VE)的模板,原先的是邻接矩阵版,所以复杂度是O(V^3)的。我的计划就是学/复习一个算法就 写一个总结上来,最后能逐渐的把我的学习经历记录一下。当然把其中一些理解写出来的话也会更加的深刻,或许还能帮到某些人,不是么,呵转载 2010-10-06 17:00:00 · 512 阅读 · 0 评论 -
加密算法不是线程安全的
<br />今天调试程序时发现一个重大BUG:加密算法不是线程安全的。如果有多个线程访问同一个加密算法类,必须保证线程同步。原创 2010-10-06 17:01:00 · 869 阅读 · 0 评论 -
过滤注释的程序
<br />一个过滤注释的程序,类似词法分析.<br />调试环境:Visual C++ 6.0<br />#include "stdafx.h"<br />#include "string.h"<br />#include "stdio.h"<br />void Solve(char fileName[]);<br />void Check(char buffer[]);<br />int main(int argc, char* argv[])<br />{<br />原创 2010-10-06 16:56:00 · 697 阅读 · 0 评论 -
变长参数函数
<br />对于C语言中printf这样的函数,参数个数不固定,类型也不固定,用重载是很难实现的。查了下printf函数的原型:_CRTIMP int __cdecl printf(const char *, ...);看到一个...。这是我第二次看到...,第一次是异常处理中用来捕获所有异常。想想也真惭愧,学C这么多年了,居然不晓得函数定义时还可以用这东西。<br /><br /> 查了关于变长参数的相关资料,原来C语言中如果函数的参数信息不定,可以用...申明。查了下MSDN,发现下面代码:<原创 2010-10-06 16:57:00 · 533 阅读 · 0 评论 -
郁闷问题
<br />今天发现安全通信类存在线程同步问题,原先以为还是由于加密算法的线程不安全性造成的,但是后来发现不是这个原因。不想再花时间解决这些琐碎问题,索性将发送函数和接受函数整个的用事件保护起来。同步问题解决,只是效率低了些。当然,用户感觉不到。原创 2010-10-06 17:02:00 · 536 阅读 · 1 评论 -
主线程退出,不代表进程会终止
核心编程上说的比较清楚,主线程返回了,系统会自动终止其他所有线程,回收资源,从而结束进程。偶尔间我发现.net里面的主线程退出时,只要还有前台线程存活,进程就不会退出。很迷惑其实现原理。查了些资料,了解到,默认情况下,只要进程中还有一个线程存活,进程就不会终止,与存活的线程是不是主线程无关,除非某个线程直接或间接的通过ExitProcess等全局性的API提前结束了进程的执行。这似乎与很多人的观点不同,呵呵。 为了简单明了,看下面代码:DWORD WINAPI OtherThread(LPVO原创 2011-05-09 17:49:00 · 2470 阅读 · 0 评论 -
C++/CLI 小结
C++/CLI 是Microsoft对C++托管扩展的一次升级。关于.net开发当然首选C#语言,但是对于那些用C/C++开发的native代码如何使用,就需要用到这里的C++/CLI了。managed code和native code交互无外乎三种技术:一种是使用P/Invoke;另一种是使用C++ Interop;第三种是COM。关于P/Invoke这里就不多说了,它为managed code调用native code提供了一种安全可靠的途径。利用它完全可以在托管环境下使用本地代码,这是必然原创 2011-04-07 16:59:00 · 1152 阅读 · 0 评论 -
导入表条目加载失败所导致的目标文件执行失败
<br /><br /> 有些系统API是有操作系统版本限制的,如GetThreadId就要求系统在Vista以上。每一个编译器建立的工程都会默认你的系统在某个版本以上,如VS2008默认的系统就是Vista以上。这样用VS2008生成的工程都可以直接使用Vista的API,但是如果你在XP下运行这个程序就会由于Entry Not Found而失败。<br /> 更郁闷的是VS2008的编译器仅在必要时重新收集程序的导入表条目。也就是说如果你的某个文件使用了某个API,如GetThreadId,原创 2011-06-02 11:09:00 · 730 阅读 · 0 评论 -
MFC扩展dll里导出函数时资源切换的问题
<br />在MFC扩展dll里导出函数时应该也进行资源的切换。<br />在共享的(动态链接的)MFC规则dll里,在每一个导出函数前都需进行资源的切换,在扩展dll里同样也需要,因为它们都是动态链接到MFC库的,在调用导出函数时,若要加载对应的资源,MFC会首先从应用程序模块里查找,找不到时才从dll中查找,所以若存在同名的资源,则可能会加载错误。<br />例子:<br />dll:MFCExtDll,它里边存在一个对话框资源IDD_DIALOG2,它对应的编号是2000,在resourc转载 2011-04-20 14:21:00 · 1441 阅读 · 0 评论 -
“应用程序配置不正确,程序无法启动”详细举例(vc2008 sp1)
<br /> http://hi.baidu.com/fairysky/blog/item/130dda13db7b050a5aaf53be.html<br />内容我就不copy了,大家可以自己去看,总来说产生这个问题的原因可以归结如下:<br />vc2005/vc2008采用了新的程序部署技术(manifest清单文件),manifest清单文件实际上类似于我们常用的makefile文件,它定义了程序运行的依赖关系(程序运行所需要的dll库的名称、版本等)。<br />程序运行,首先根据manifes转载 2011-04-23 15:35:00 · 830 阅读 · 0 评论 -
VC的异常处理
<br /> 默认情况下,使用try/catch只能捕获到程序中通过throw抛出的异常,也就是说只能捕获到C++异常。但是除此之外还有Win32异常、CRT异常、CLR异常以及MDA异常等等。为了能够在VC中通过catch(...)捕获所有异常,需要修改工程配置,在配置属性->C/C++->代码生成->启动C++异常,选择是,但有SEH异常即可捕获到所有异常。<br /> 这样一来是可以补货所有异常了,但是出现异常时就会直接定位到catch中,不利于错误的排查。可以在调试->异常里面将C++原创 2011-05-07 16:32:00 · 827 阅读 · 0 评论 -
VC编程时关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息
关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息这两个消息比较古怪,虽然你能找到他们的定义,看起来也似乎挺有用,但是却接收不到。如果要处理这两个消息需要手动在WM_MOUSEMOVE消息处理函数中添加:添加变量:BOOL m_bTracking;m_bTracking = FALSE;添加消息处理函数:afx_msg转载 2011-11-01 11:24:56 · 1111 阅读 · 0 评论 -
placement new
看起来不可能的事情在C++中总能找到解决的办法。<br />正如,直接调用构造函数是不可能的,然而可以用placement new 欺骗编译器调用构造函数。<br />--------------------------------------------------<br />1、placement new 为何物?<br />placement new 是重载operator new 的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new转载 2010-10-06 16:59:00 · 402 阅读 · 0 评论 -
在构造函数中调用构造函数
首先明确一点:直接调用构造函数,只有一个作用,就是在栈上构造一个临时对象。<br />所以构造函数的互相调用引起的后果不是死循环,而是栈溢出。理论上,不允许在某个构造函数中调用其他构造函数。除非有特别的功能需求。<br />假设一个类<br />class A<br />{<br />public:<br /> A();<br /> A(int i);<br /> ~A();<br />}<br />假设实现是这样的:<br />A::A转载 2010-10-06 16:58:00 · 773 阅读 · 0 评论 -
从二进制的角度看对象
天下大势,合久必分,分久必合。感觉这句话很有道理,基本上蕴含了普天万物的发展规律。IT技术似乎也是如此,比如说异步与同步。异步是自然界的普遍现象,而同步不是,是需要人工干预的。为了保证一致性,我们引入了同步机制。然而当我们有效地解决了这个问题以后,又发现了新的问题:效率。为了解决这个新问题,我们又回过头来研究异步。就这样反反复复多次,最终达到平衡。B/S架构似乎就是一个很好的例子。 <br />软件工程似乎也是如此。一开始我们从机器的角度考虑问题,使用汇编写代码。问题繁琐,但是单一。为了模拟原创 2010-10-06 16:58:00 · 696 阅读 · 0 评论 -
学生成绩管理系统(2)
/*obf.c*/<br />void Ope(struct _stu *head,char *a,char x) /*打开一已有文件*/<br />{FILE *fp;<br />struct _stu *p1,*p=head;<br />char b='n';<br />if(!x)<br />{while(b=='n'||b=='N')<br />{printf("Please input the filename:");<br /> scanf原创 2010-10-06 09:16:00 · 993 阅读 · 0 评论 -
怎样实现C结构体数据的整体复制
可以将结构体类型数据指针强制转换为字符指针,然后在利用循环逐个字节复制。函数如下:<br />void StructCopy(char *a,char *b,long size)<br />{<br /> long i;<br /> for(i=0;i<size;i++)<br />*a++=*b++;<br />}<br />如果想将结构体类型数据指针a整体复制给b,可以调用如下:<br />StructC原创 2010-10-06 09:07:00 · 2830 阅读 · 0 评论 -
四色着图
<br />#include <stdio.h><br />#include <malloc.h><br />#define MAPSIZE 10<br />#define NCOUNTRIES 5<br />struct node{ /* 结点类型*/<br />int Country;<br />struct node *next;<br />};<br />struct{<br />struct node *head;<br />str原创 2010-10-06 09:04:00 · 708 阅读 · 0 评论 -
K中心点聚类算法
<br />K中心点聚类算法,调试环境:TC 2.0<br />#include<math.h><br />#include<conio.h><br />#include<stdio.h><br />#include <stdlib.h><br />#include <graphics.h><br />struct object<br />{<br /> int x;<br /> int y;<br /> int z;<br /> int原创 2010-10-06 16:55:00 · 2958 阅读 · 0 评论 -
函数内静态成员——线程不安全
今天调了一天程序,发现一个不起眼的问题:函数内的静态成员是线程不安全的。动态调试时可能报栈帧错误,不太容易注意到。当有多个线程频繁调用一个函数时,最好保证这个函数内没有静态成员。原创 2010-10-06 16:59:00 · 619 阅读 · 0 评论 -
跨模块
<br /> C++对于没有任何成员函数的结构体和包含至少一个成员函数的结构体处理方式大部分情况下是一样。但是当一个函数返回一个结构体时,有成员函数的没有的很有差别,如果不是通过返回值返回结构体的,两种情况都一样,所以一般不要返回一个结构体。可以将这个返回值作为传出参数返回。<br /> STL不是模块安全的。如果在一个模块(如DLL)中返回一个STL对象(vector,string等)给另一个模块用时,可能会出现莫名错误。原因在于STL用到了很多静态变量,这些变量都是模块相关的。可原创 2010-10-06 17:01:00 · 583 阅读 · 0 评论 -
C++ Inline ASM 内联汇编详解
<br />一、 优点<br /> 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本,可能会有些许出入)。<br /> 内联汇编代码可以使用 C/C++ 变量和函数,因此它能非常容易地整合到 C/C++ 代转载 2010-10-06 17:02:00 · 1015 阅读 · 0 评论 -
VC Debug 小技巧——伪符号
<br /> 我们在调用WINDOWS函数的时候,经常要在后面加一条GetLastError()来取得函数出错的错误码以及原因, 如果在调试的状态中,WINAPI出错了,那我们又要停下来,加一句GetLastError(),然后再跑。这样调试起来很不方便。其实我们可以使用VC里的一些固定符号来进行调试。<br /> 下面说一下第一个@ERR,我们等函数执行完,并确定它出错了,那我们就可以在VC 的 WATCH窗口里加上@ERR,那我们就马上可以看到出错的错误码了。如果我们还想知道转载 2010-10-06 17:03:00 · 556 阅读 · 0 评论 -
一类很有趣的数——回归数
<br />前些天看到一下一篇文章:<br />--------------------------------------------------------------------------<br />英国大数学家哈代(G.H.Hardy,1877-1947)曾经发现过一种有趣的现象:<br /> 153=13+53+33 371=33+73+13 370=33+73+03 407=43+03+73<br />他们都是三位数且等于各位数字的三次幂之和,这种巧合不能原创 2010-10-06 16:54:00 · 814 阅读 · 0 评论 -
EAN-13条形码打印算法
<br />此算法实现将给定的条形码编码转换成黑白条的二进制代码,利用此二进制代码可以打印出条形码.例如条形码编码"9787115159342"转换为黑白条二进制代码为"20201110110001001001000100110010110011011000102020110011010011101110100100001010111001101100202"(为了区分警戒条和有效编码,将警戒条用2表示),打印输出条形码图案时遇到2打印长条,遇到1打印短条,遇到0则空出,这样输出的即为条码图案.<br />原创 2010-10-06 16:55:00 · 1433 阅读 · 0 评论 -
STL随感
最近看了下STL的相关知识。不是闲着无事,只是感觉作为一个计算机专业的研究生,不了解STL似乎说不过去,看了以后感觉STL比我想象的要简单些,虽然里面算法很多,但是结构比较单一,容易看懂,不向MFC,前些日子差点挂在MFC里面。不过话说回来,在看MFC源码的过程中,我真的受益匪浅。虽然举步维艰,但是常有恍然大屋之感,也在里面学了不少小技巧和架构知识。相比之下VC中自带的STL库则太过垃圾。MFC的源码那么优秀,咋的STL库就那么渣呢?浏览了下感觉就是天书,命名没有规则,源码格式十分混乱,据说还有很多BUG,原创 2010-10-06 16:58:00 · 612 阅读 · 0 评论 -
数据访问的封装
<br /> 最近比较烦躁,天气冷了,胃也渐渐感到不舒服,公司的伙食偏辣,感觉不太适应。公司近期有点动荡,新人没到岗,老员工却走了几个。闲下来我总会时不时地去想走过的路,我们把太多的实现花费在确定到底做什么以及所谓的怎么做上,真正做事的时间太少。越想越烦躁,于是就自己向老板请战,决定亲自把数据层的数据访问做了。老板想为我们的软件做个中枢神经系统,也就是他说的数据层,这个想法很不错——其实老板的很多想法都很好,很靠前,只是凭借我们目前的实力很难实现。这个中枢神经目前自然搞不定,我的想法就是先把数原创 2010-10-06 17:00:00 · 573 阅读 · 0 评论 -
Windows设置进程在特定CPU上运行
通过Win32 API SetProcessAffinityMask实现,原型如下:BOOL WINAPI SetProcessAffinityMask( _In_ HANDLE hProcess, _In_ DWORD_PTR dwProcessAffinityMask);具体可参考:http://msdn.microsoft.com/zh-cn/librar原创 2013-03-20 11:58:28 · 1016 阅读 · 0 评论