C/C++
dangercheng
这个作者很懒,什么都没留下…
展开
-
MFC实现C#,java中的Split方法
MFC中对CString类型的操作并没有Java和C#中封装的类似Split方法,此方法是用于实现按指定符号分隔字符串保存到数组中,例如: string str = "a,b,c,d,e,f" 那么经过调用Split(',')后就返回一个数组string[],分别保存着a, b, c, d, e, f 然后循环遍历数组就可以取到没一项了。下面是MFC实现这一功能的代码: //实现C#的Strin原创 2012-11-21 11:29:27 · 2213 阅读 · 1 评论 -
MoreWindows 专注于Windows编程 白话经典算法系列之六 快速排序 快速搞定
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快转载 2013-10-10 17:07:09 · 807 阅读 · 0 评论 -
vs2012编译boost_1_53_0
Boost库的介绍 Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。 Boost库中比较转载 2013-10-10 21:44:21 · 2719 阅读 · 1 评论 -
c/c++:内存泄露和野指针的概念
内存泄漏 用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,不能被任何程序再次使用,直到程序结束。即所谓内存泄漏。 注意:内存泄漏是指堆内存的泄漏。 简单的说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露转载 2013-10-11 15:47:48 · 7334 阅读 · 0 评论 -
设计模之工厂模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。本文介绍工厂模式的实现。 工厂模式属于创转载 2013-10-12 09:47:15 · 716 阅读 · 0 评论 -
桥接模式探究
pimpl 用法背后的思想是把客户与所有关于类的私有部分的知识隔离开。由于客户是依赖于类的头文件的,头文件中的任何变化都会影响客户,即使仅是对私有节或保护节的修改。pimpl用法隐藏了这些细节,方法是将私有数据和函数放入一个单独的类中,并保存在一个实现文件中,然后在头文件中对这个类进行前向声明并保存一个指向该实现类的指针。类的构造函数分配这个pimpl类,而析构函数则释放它。这样可以消除头文件与实转载 2013-10-12 09:42:10 · 675 阅读 · 0 评论 -
c++模板类学习
1、模板的概念 我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。 //函数1. int max(int x,int y) { return(x>y)?x:y ; } //函数2. float转载 2013-10-12 10:28:59 · 554 阅读 · 0 评论 -
彻底搞定C指针---指向指针的指针(转)
转自:http://bbs.byr.cn/#!article/CPP/4470 一. 回顾指针概念: 今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧! 当我们程序如下申明变量: short int i; char a; short int * pi; 程序会在内存某地址空间上为各变量开辟空间,如下图所示。 内存地址→6 7转载 2013-09-26 16:10:49 · 528 阅读 · 0 评论 -
free()函数
c语言中经常需要给指针变量分配内存空间,需要用到一组函数: malloc()和free() 使用的时候需要包含头文件stdlib.h malloc()比较好理解,主要关注下free()函数,看下面一段代码: char *str = (char *) malloc (100); strcpy(str, "hello world!"); free(str); strcpy(str,转载 2013-09-27 17:07:53 · 1132 阅读 · 0 评论 -
内联函数与普通函数的区别是什么
内联函数是代码被插入到调用者代码处的函数。如同 #define 宏,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。 内联函数和宏很类似,而区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调转载 2013-10-15 09:56:45 · 728 阅读 · 0 评论 -
DLL注入
DLL注入的一般步骤为: (1)取得注入进程ID dwRemoteProcessId; (2)取得注入DLL的完全路径,并将其转换为宽字符模式pszLibFileName; (3)利用Windows API OpenProcess打开宿主进程,应该开启下列选项: a.PROCESS_CREATE_THREAD:允许在宿主进程中创建线程; b.PROCESS_VM_OPERATIO转载 2013-10-21 09:57:32 · 696 阅读 · 0 评论 -
strcat,strcmp,memcpy,strcpy等函数的实现
1、Strcat函数原型如下 char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数 { char * address = strDest; //该语句若放在assert之后,编译出错 assert((strDest != NULL) && (strScr != NULL));转载 2013-10-10 15:59:45 · 1021 阅读 · 0 评论 -
堆和栈的区别
一、预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态转载 2013-10-09 10:28:45 · 572 阅读 · 0 评论 -
C++ 实现类似java c#List的方法 boost::any的使用
重新学习C++,写代码遇到这么一个问题: class Child:public Base { ...一些Child类独有的数据和操作 }; Vector baseVec; Child child; baseVec.push_back(child); 问题在于如何获取beseVec里面的child赋给其他的Child对象? 因为Child类有自己独有的一些数据和操作,所以不能通过一个原创 2013-05-17 22:29:34 · 1419 阅读 · 0 评论 -
两次fork函数可以防止进程僵死的理解
最近在看APUE,在进程控制章节中有个关于两次fork防止进程僵死的列子很是不理解,经过一番研究发现原来原理很简单,以下是实例: 1 #include 2 #include 3 #include 4 5 int main(void) 6 { 7 pid_t pid; 8 if((pid = fork()) < 0) 9原创 2013-07-08 23:22:18 · 1866 阅读 · 0 评论 -
变量的属性(全局变量、局部变量、动态变量、静态变量等)
变量的属性 1、变量的分类 l 根据作用域:可分为全局变量和局部变量。 l 根据生存周期:可分为静态存储方式和动态存储方式,具体地又分为自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。 静态存储方式是指在程序运行期间分配固定的存储空间的方式,动态存储方式是在程序运行期间根据需要进行动态的转载 2013-07-08 15:46:02 · 874 阅读 · 0 评论 -
linux的c中signal函数
signal函数:void (*signal(int,void(*)(int))(int); signal函数是著名的信号函数,但是它的定义却非常的复杂…… 任何C变量,都是由“类型”+“表达式”组成,它表示,对“表达式”求值,返回的类型,是声明给定的“类型”的值,如 int a; 也就是对表达式a求值,是一个int类型; 同样地, int func转载 2013-07-12 13:24:57 · 2355 阅读 · 0 评论 -
内存静态分配和动态分配的区别
要弄懂这个问题,首先你得知道静态和动态指的是什么。个人觉得卡耐基上的解释很经典: “The word static refers to things that happen at compile time and link time when the program is constructed—as opposed to load time or run time when th转载 2013-07-16 11:03:36 · 891 阅读 · 0 评论 -
递归锁
递归锁在同一线程 内起作用。 [cpp] view plaincopy //线程属性 #include #include #include pthread_mutex_t g_mutex; void test_fun(void); static void thread_init(vo转载 2013-07-17 12:51:18 · 834 阅读 · 0 评论 -
线程的分离状态
线程的分离状态决定一个线程以什么样的方式来终止自己。 线程的默认属性,一般是非分离状态, 这种情况下,原有的线程等待创建的线程结束。 只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。 而分离线程没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。 程序员应该根据自己的需要,选择适当的分离状态。转载 2013-07-17 10:33:50 · 2558 阅读 · 0 评论 -
linux编程-守护进程编写
linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。 同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程转载 2013-07-18 11:39:13 · 515 阅读 · 0 评论 -
守护进程创建步骤
daemon进程步骤 1. 调用fork产生一个子进程,同时父进程退出,所有后续工作都在子进程中完成。 如果我们是从命令行执行的该程序,这可以造成程序执行完毕的假象,shell会回去等待下一条命令; 刚刚通过fork产生的新进程一定不会是一个进程组的组长,这为第2步的执行提供了前提保障。 由于父进程已经先于子进程退出,会造成子进程没有父进程,变成一个孤儿进程(orphan转载 2013-10-02 10:45:19 · 737 阅读 · 0 评论 -
auto_ptr浅析
auto_ptr是C++标准库中()为了解决资源泄漏的问题提供的一个智能指针类模板(注意:这只是一种简单的智能指针) auto_ptr的实现原理其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。 std::auto_ptr pa(new ClassA); 下面主要分析一下auto_ptr的几个要注意的地方: 1,Transfer转载 2013-10-07 19:46:52 · 552 阅读 · 0 评论 -
DLL注入技术之远线程注入
玩了这么久的hack,竟然到最近玩一个QQ显IP小软件的时候才知道注入是干什么用的,惭愧惭愧。刚好看到一个论坛上有一系列简明的说dll注入的文章 特此转载 正规主题 作者: DLL注入技术之远线程注入 日期: 2013-05-31 来源: 黑客反病毒 (http://bbs.hackav.com) 出处转载 2013-10-21 09:59:22 · 1233 阅读 · 0 评论