C++
Phoenix_FuliMa
这个作者很懒,什么都没留下…
展开
-
头文件中定义 const 全局变量应注意的问题
我们知道,在 C++(但不是在 C 语言)中,const 限定符对默认存储类型稍有影响。在默认情况下,全局变量的链接性为外部的,但 const 全局变量的链接性为内部的。也就是说,在 C++ 看来,全局 const 定义就像使用了 static 说明符一样。 因此,可以将 const 常量定义在头文件中供工程中的多个其它文件包含引用,并且编译时不会产生变量重复定义的错误。当然,也可以转载 2013-01-14 09:22:02 · 1883 阅读 · 1 评论 -
Free Heap block ***modified at ***after it was freed
#include #include #include void test(void);void testStruct(void);void tt(void);struct tagTest { int a; int b;};int main(int argc, char* argv[]){ testStruct(); test(); system("paus转载 2012-04-20 10:51:34 · 2192 阅读 · 0 评论 -
临界区CRITIAL_SECTION需要注意的问题
CRITICAL_SECTION sec; EnterCriticalSection(&sec); LeaveCriticalSection(&sec); DeleteCriticalSection(&sec);如果这样不对section进行初始化的话就会出现下面的错误提示: 0xC0000005: 读取位置 0xccccccd4 时发生访问冲突应该先进行初始化操作原创 2012-04-20 10:59:40 · 2554 阅读 · 0 评论 -
Windows下的文件处理函数
在标准C中,利用C语言的库函数fopen,fclose,fread,fwrite和feek来对文件的输入和输出进行操作。在Win32 API中,又可以有一系列函数来进行文件操作,当然,也可以用标准C函数。对于一般文件的打开和保存,读者会想到以前介绍的通用对话框库,其中包括 OpenFile对话框和SaveFile对话框。它们巧妙地避开了有关系统的文件名分析,简化了步骤,所以,在一般情况下使转载 2012-03-21 20:33:26 · 2372 阅读 · 0 评论 -
c++循环创建多级目录
#include "unitfiles.h"#ifdef WIN32#include #include #elif LINUX#include #include #endif#ifdef WIN32#define ACCESS _access#define MKDIR(a) _mkdir((a))#elif LINUX#define ACCESS acce原创 2012-04-06 08:22:07 · 7291 阅读 · 0 评论 -
C++判断指定目录是否存在
bool IsDirExist(string filename){ size_t len = filename.length(); if(filename[len-1] != '/' && filename[len-1] != '\\') filename.append("/"); filename.append("000.tmp"); ofstream outf(filename.原创 2012-04-06 09:05:23 · 1835 阅读 · 0 评论 -
模板使用举例
#ifndef __JJALLOC__#define __JJALLOC__#include #include #include #include #include namespace JJ{ template inline T* _allocate(ptrdiff_t size, T*) { set_new_handler(0); T* tmp = (T*)(原创 2012-04-06 21:31:52 · 748 阅读 · 0 评论 -
CreateFile, ReadFile详解
一、*****CreateFile***** 这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象:控制台对象、通信资源对象、目录对象(只能打开)、磁盘设备对象、文件对象、邮槽对象、管道对象。 函数原型:HANDLE CreateFile(LPCTSTRlpFileName, // file name对象路转载 2012-03-19 19:12:33 · 14365 阅读 · 0 评论 -
重载操作符详解
重载操作符是具有特殊名称的函数,保留字operator后接续定义的操作符符号,像任意其他函数一样,重载操作符具有返回类型和形参表。(1) 重载操作符必须具有一个类类型的操作数(2) 优先级和结合性是固定的(3) 不在具有短路求值特性重载的参数个数重载一元操作符如果作为成员函数就没有形参,如果作为非成员函数就有一个形参,类似的,重载二元操作符定原创 2012-03-19 08:27:28 · 1676 阅读 · 0 评论 -
map详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识转载 2012-03-16 09:05:04 · 439 阅读 · 0 评论 -
头文件string与string.h的区别
在C++中,#include与#include的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,出了有些搞嵌入式的用变态的编译器)。喔,原来iostream是C++的头文件,iostream.h是C的头文件,即标准的C++头文件没有.h扩展名,将以前的C的头文件转化为C++的头文件后,有时加上c的前缀表示来自于c,例如cmath就是由math.h变来的。using na转载 2012-04-24 09:06:48 · 751 阅读 · 0 评论 -
vs2010编译BOOST库
Boost库,很多人都知道是“准”C++的标准库,跨平台应该,很多相当实用的库函数,对于开发标准程序来说都是首选!一、Boost的安装:先到官网下载http://sourceforge.net/projects/boost/files/boost/1.47.0/,现在我下载的版本是1.47.0解压缩后,打开windows命令行,转到“boost_1_47_0\tools\bui转载 2012-06-21 09:50:43 · 2893 阅读 · 1 评论 -
创建和使用动态链接库 (C++)
我们将创建的第一种类型的库是动态链接库 (DLL)。 使用 DLL 是一种重用代码的绝佳方式。 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。本演练涵盖以下内容:创建新的动态链接库 (DLL) 项目。向动态链接库添加类。创建引用动态链接库的应用程序。在控制台应用程序中使用类库的功能。运转载 2012-06-26 09:09:50 · 622 阅读 · 0 评论 -
vs2010创建和使用动态链接库(dll)
vs2010创建和使用动态链接库(dll)本文将创建一个简单的动态链接库,并编写一个应用台控制程序使用该动态链接库,并提出了与实现相关的几个问题,供初学者交流。本文包含以下内容:创建动态链接库项目向动态链接库添加类创建引用动态链接库的应用程序在控制台应用程序中使用类库的功能更丰富的simpledll类和相关问题参考资料转载 2012-11-21 15:08:39 · 1362 阅读 · 0 评论 -
STL迭代器失效问题记录
/* 根据书中所述,map和list相同的某些性质,当客户端对她进行元素新增操作或删除操作时, 操作的所有迭代器,在操作完成之后依然有效,但让,被删除的那个元素的迭代器必然是个例外。 而vector的迭代器在删除的时候,会返回指向下一个内容的指针,但是对vector的任何操作,一旦引起空 间重新配置,指向原来的vector的所有迭代器都将失效了。这是程序员容易犯的一个错误。*/#inc原创 2012-11-14 20:58:24 · 832 阅读 · 0 评论 -
c++静态库与动态库的区别
如果对Linux下静态链接库和动态链接库感兴趣,请狂点击 -->你懂的一,概念 1)静态链接库就是你使用的.lib文件,库中得代码最后需要连接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。 使用方法 1> 格式如:#pragma comment(lib,"XXX.lib")转载 2012-11-26 11:41:19 · 21135 阅读 · 3 评论 -
友元函数和友元类
友元函数和友元类 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检转载 2012-10-22 09:53:14 · 718 阅读 · 0 评论 -
C++构造函数执行顺序测试(成员包含其他类对象的时候)
#include #include using namespace std;class A{public: A() { printf("A constructor.....\n"); } ~A() { printf("A destructor......\n"); }};class B{public: B() { printf("B constr原创 2012-10-21 09:46:08 · 1903 阅读 · 0 评论 -
c++ 函数返回引用
一,c++函数的返回分为以下几种情况 1)主函数main的返回值:这里提及一点,返回0表示程序运行成功。2)返回非引用类型:函数的返回值用于初始化在跳用函数出创建的临时对象。用函数返回值初始化临时对象与用实参初始化形参的方法是一样 的。如果返回类型不是引用,在调用函数的地方会将函数返回值复制给临时对象。且其返回值既可以是局部对象,也可以是求解表达式的结果。3)返回引转载 2012-09-07 09:06:12 · 869 阅读 · 0 评论 -
内存对齐详细解释
1. 定义: sizeof是何方神圣? sizeof 乃 C/C++ 中的一个操作符(operator)是也。简单说其作用就是返回一个对象或者类型所占的内存字节数。MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with a variable o转载 2012-07-30 15:36:13 · 864 阅读 · 0 评论 -
vs2005中Def文件的使用方法(DLL编写无法找到函数名称)
vs2005使用Def文件需要配置,这一点与vc6不同。vc6工程中,只要有DEF文件并将其添加到工程中,vc6就可以自动地生成DLL与其相应的Lib文件了。而vs2005需要指定相关的Def文件, 如下:选择 工程 -> 属性 -> 链接器 -> 输入. 在 "模块定义文件" 中输入NonMfcDll.def.附.def文件的作用:让编译器不要以microsof转载 2012-07-17 21:29:13 · 1638 阅读 · 0 评论 -
C++ - C++ signal的使用
1. 头文件#include 2. 功能设置某一信号的对应动作3. 函数原型void (*signal(int signum,void(* handler)(int)))(int); 分解来看: typedef void (*sig_t) (int); sig_t signal(int sig, sig_t func);转载 2012-06-29 09:56:59 · 889 阅读 · 0 评论 -
VS2008中使用JSONCPP方法小结
IntroductionJSON (JavaScript Object Notation) is a lightweight data-interchange format. It can represent integer, real number, string, an ordered sequence of value, and a collection of name/valu转载 2012-03-31 17:28:24 · 1660 阅读 · 1 评论 -
LNK2005错误
编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。造成LNK2005错误主要有以下几种情况:1. 重复定义全局变量。可能存在两种情况:A、 对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确转载 2012-03-15 10:27:53 · 513 阅读 · 0 评论 -
使用 C++ 处理 JSON 数据交换格式
一、摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。本文并不详细介绍 JSON 本身的细节,旨在讨论如何使用 C++ 语言来处理 JSON。关于 JSON更具体的信息,可参见 JSON 官网:http://www.json.org转载 2012-03-31 17:26:56 · 696 阅读 · 0 评论 -
seekg()/seekp()与tellg()/tellp()的用法详解
对输入流操作:seekg()与tellg()对输出流操作:seekp()与tellp()下面以输入流函数为例介绍用法:seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是:ios::beg:表示输入流的开始位置ios::cur:表示输入流的当前位置io原创 2012-03-03 14:05:36 · 67495 阅读 · 5 评论 -
C++文件流定位
#include #include #include using namespace std; int main() { ifstream in("test.txt"); assert(in.is_open()); //基地址为文件结束处,偏移地址为0,于是指针定位在文件结束处 in.seekg(0, ios::end);原创 2012-03-03 14:02:50 · 4805 阅读 · 0 评论 -
C++获取文件夹下面文件名列表
#include #include #include #include #include #include #include using namespace std; void getFiles( string, vector& ); int main() { vector转载 2012-02-20 11:07:38 · 7685 阅读 · 0 评论 -
Failed to save the updated manifest to the file
第1种方法: 手动删除Debug,注:在VS2008有2个Debug,2个都要删第2种方法: 自动删除:在VC++6.0编译器下,build--->Clean,而在VS2008下,生成--->清理解决方案第3种方法: 适用于VS编辑器,点class view中的工程,选右鍵,再点clean就可以了;或者是 build->clean solusion也可以原创 2012-02-18 14:26:56 · 887 阅读 · 0 评论 -
C语言文件操作
(1) fopen函数表头文件: #include 定义函数: FILE *fopen(cosnt char *path,const char *mode);函数说明:参数path字符串包含欲打开的文件路径及文件名, 参数mode字符串则代表着流的形态Mode有一下集中形态字符串r 打开只读文件r+ 打开可读写文件,该文件必须存在原创 2012-02-17 23:28:25 · 811 阅读 · 0 评论 -
C++文件操作函数详解
C++通过以下几个类支持文件的输入输出(1) ofstream:写操作,输出文件类;(2) ifstream:读操作,输入文件类;(3) fstream:可同时读写的文件类。1. open函数:打开文件函数原型:void open(const char*filename,int mode,int access); 参数说明:原创 2012-02-19 10:33:08 · 27260 阅读 · 1 评论 -
fwrite和fread应用
fwrite和fread函数的简单应用,函数原型可以查看”C文件操作"文章fwrite.cpp#include #include #define SIZE 2 struct student_type { char name[10]; int num; int age; char addr[10]; }stud[SIZE]; void save(原创 2012-02-19 09:49:20 · 1412 阅读 · 0 评论 -
如何在Vs 中添加boost库,配置问题。
Vs 中添加boost库编译的时候出现了这个问题弄了好久才找出问题两个点:1.Project-->属性-->C/C++-->General-->Additional Include Derectories中加入你的boost目录2.Project-->属性-->Linker-->General-->Additional Library Derectories中加入/原创 2012-02-18 14:12:37 · 4609 阅读 · 0 评论 -
聊天程序源码(服务器端)
server.h //定义一些函数#include #include #include #include #include #include #include #include #include #include #include #define bufsize 255#define namesize 20int tcpSocket(){ int n;原创 2012-02-04 09:52:36 · 1044 阅读 · 0 评论 -
前缀表达式
运算顺序前缀表达式的运算顺序很容易检测。需注意的是,当运算时,操作符是作用在第一个操作数上,特别是需注意不满足交换律的运算,如除法、减法。例如,下列式子:/ 10 5 = 2 (前缀记法)表示10/5,结果是2,而不是½。基于堆栈的操作符由于其本身的特性,无需括号也很容易区分运算的顺序,因此大量使用波兰记法。运算波兰表达式时,无需记住运算的层次,只需要直接寻找第一个运算的操作符。原创 2012-02-03 16:44:38 · 3199 阅读 · 0 评论 -
C语言获取系统时间的几种方式
C语言中如何获取时间?精度如何?1 使用time_t time( time_t * timer )精确到秒2 使用clock_t clock()得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒3 计算时间差使用double difftime( time_ttimer1, time_t timer0 )4 使用DWORD GetTickCount()精确到毫秒原创 2012-03-04 14:26:36 · 1036 阅读 · 0 评论 -
map/set iterator not dereferencable
昨天遇到这个问题,记录一下,原来是我的map mappbj; mapobj中没有内容,我就直接访问迭代器的first。原创 2012-03-04 10:05:53 · 7036 阅读 · 0 评论 -
VS如何创建和使用lib文件
如果你当前正在使用vs写了一个工程,那么你想现在就生成一个Lib文件,那么可以直接在“项目属性”上进行修改i项目属性-》配置属性-》常规-》配置类型中修改即可,如下图所示。lib的使用方法:(1).h文件,即Lib中函数的声明。(2)lib,将lib所在目录加入到附加库目录中。如下图所示,我生成的lib名称为API.lib,存放在了d:\Projects\API\Debug原创 2012-03-05 14:04:05 · 37071 阅读 · 2 评论 -
C++可变参数编程,va_start va_arg va_end 的使用和原理
1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...);2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:先介绍一下可变参数表的调用形式以及原理:首先是参数的内存存放格式:参数存放在内存的堆栈段中,在执行函数的时候,从最后一个开始入栈。因此栈底高地址,转载 2012-03-14 08:47:48 · 756 阅读 · 0 评论 -
字符串合法性检测1
“名称 类型,名称 类型”#include #include #include #include using namespace std;int main(){ char *p = " name sting, ring in "; char *beg = p; while(*p != '\0') { char *end = NULL; char *toke原创 2012-03-13 21:08:39 · 680 阅读 · 0 评论