随笔分类 -  C/C++

摘要:最近由于要用zip解压缩,网上找了,没看到满意的源码,于是自己写了一个。亲测可用接口很简单,看代码吧。有问题的地方欢迎留言指正zlib_wrapper.h:#ifndef ZLIB_WRAPPER#define ZLIB_WRAPPER#include <vector>#include "zlib.h"//把一个字节流用zip算法压缩,压缩结果存放在result_buffer里面//src_buffer: [IN]输入buffer的起始地址//src_len: [IN]输入buffer长度//result_buffer:[OUT]存放压缩结果//返回值:true 阅读全文
posted @ 2012-12-21 19:02 kcy-666 阅读(4210) 评论(0) 推荐(0)
摘要:1. 下载源文件,因为要用到头文件。当然你也可以用来自己编译生成dllhttp://www.sqlite.org/download.html2.下载dll3.解压dll并生成lib文件4.把生成的lib和下载到的dll加进你的工程,编译,此时不出意外应该会报链接错误5.问题解决:首先用depends工具查看dll里面到到处函数注意到了吗?dll里面是C导出方式,没有名字重组。但是看上面链接错误,明显是因为调用约定的不同导致的(前者是标准C调用约定,后者是__stdcall下的C调用约定,这个从名字重组的方式可以看到)。于是我在工程配置里面修改调用约定为__cdecl,问题解决 阅读全文
posted @ 2012-09-04 21:08 kcy-666 阅读(2050) 评论(2) 推荐(2)
摘要:这是第二次写关于__int64的文章了,问题与上次类似,出现问题的原因也一样。不过让我找了几天的BUG总得记下来!先上一段测试代码:int _tmain(int argc, _TCHAR* argv[]){ __int64 i64 = -sizeof(int); __int64 j64 = -4; cout << "i64 = " << i64 << endl; cout << "j64 = " << j64 << endl; int i4 = -sizeof(int); int j 阅读全文
posted @ 2012-05-17 14:25 kcy-666 阅读(1878) 评论(0) 推荐(0)
摘要:今天使用source insight查看代码,不小心删除了Base项目,导致c标准库符号、mfc中的符号不能被识别。于是自己新建了一个Base项目,发现不能被别的项目所公用。最后在SI的帮助文档里面找到了解决方法。 这里的path跟Path路径的概念几乎一样,都是在当前项目中找不到符号的时候最后查找的地方。 更详细的内容请看SI帮助:http://www.sourceinsight.com/docs35/af914622.htm 阅读全文
posted @ 2012-05-13 18:46 kcy-666 阅读(5606) 评论(1) 推荐(0)
摘要:下面的类完成在编译时检查类型T是否可以转化成类型U:template <class T, class U>class Conversion{public: enum { /*这里很巧妙:MakeT()返回一个T类型,此时如果T可以转化成U,那么会调用static Small Test(U);返回一个Small类型,从而exists会在编译期间就被确定成1;如果T不能转化成U,则会调用s... 阅读全文
posted @ 2012-05-04 19:48 kcy-666 阅读(546) 评论(0) 推荐(0)
摘要:上代码: int _tmain(int argc, _TCHAR* argv[]){ int i = 0; int j = ++i; int k = i++; return 0;}汇编代码:int _tmain(int argc, _TCHAR* argv[]){ push ebp ;保护栈指针,以便函数结束以后恢复调用者的栈状态 mov ebp,e... 阅读全文
posted @ 2012-05-04 19:24 kcy-666 阅读(1631) 评论(0) 推荐(0)
摘要:今天使用公司代码的日志模块记录程序运行的相关信息,发现日志总是只有两条记录,即程序启动和结束,别的都没有。跟踪了很久,终于发现是日志输出模块被我修改了一个地方:把fopen改成了fopen_s,毕竟报了warning。但是这也是问题的根源! 下面的说明来自于msdn: Files opened by fopen_s and _wfopen_s are not sharable. If you ... 阅读全文
posted @ 2012-04-20 19:21 kcy-666 阅读(10316) 评论(0) 推荐(1)
摘要:记录一下: 阅读全文
posted @ 2012-04-18 17:52 kcy-666 阅读(771) 评论(0) 推荐(0)
摘要:今天在网上突然看到“c++ standard”一词,便想去弄一份c++标准的电子档来看,发现了一些有趣的事情,记录下来 c++标准不是免费的,原因看这里 (http://www.comeaucomputing.com/csc/faq.html#B1) Why isn't the C++ standard free? As Bjarne Stroustrup wrote: I ... 阅读全文
posted @ 2012-04-11 19:01 kcy-666 阅读(330) 评论(0) 推荐(0)
摘要:以前在vs里面试过,可以由函数体,但是不能定义对象。 这次在codeblocks里面,用gcc编译,发现不能有定义,否则会报错: 这里我比较支持gcc的做法 阅读全文
posted @ 2012-04-06 09:50 kcy-666 阅读(562) 评论(0) 推荐(0)
摘要:最近在公司的代码里面看到一种多态的形式,本质没有变化,只不过形式变了,以下是大致代码: template <typename HANDLE, int TYPE = 0>class CNetHandler : public HANDLE{public: CNetHandler() { m_pThis = this; } ~CNetHandler() { m_pThis = NULL; } stat... 阅读全文
posted @ 2012-04-04 17:07 kcy-666 阅读(199) 评论(0) 推荐(0)
摘要:今天完成了统计20G单词文件中单词频率的程序,先生成了一个500M的文件做测试。程序大体是这样的: 我设计了一个缓冲池,用来存放读文件线程读到的单词。缓冲池中有很多缓冲块,每个缓冲块都使用一个我设计的计数器来统计该缓冲块中出现过的单词频率,最后在主线程中合并计数器。 每个缓冲块都有两个事件内核对象,一个表示块可读,一个表示块可写,两个都是自动重置事件对象 整个缓冲池有一个表示完... 阅读全文
posted @ 2012-03-23 23:22 kcy-666 阅读(1115) 评论(0) 推荐(0)
摘要:下面的代码从含有多个结束符的字符串中分离出单词来,需要对strtok_s有清楚的认识。这段代码是我在写一个处理文件中单词个数时用来分离读取到的字符串中的单词时写的,亲测可用~ void ParseBuffer(CWordCounter *pCounter, CWordBuffer *buf){ char *strSrc = buf->m_buff; //缓冲块首地址 char *str... 阅读全文
posted @ 2012-03-21 18:24 kcy-666 阅读(19121) 评论(0) 推荐(0)
摘要:strcpy_s是strcpy的安全版本,它之所以安全,是因为其在拷贝字符串的时候会有越界的检查工作。以下是strcpy_s的实现代码,在tcscpy_s.inl文件可以找到: /****tcscpy_s.inl - general implementation of _tcscpy_s** Copyright (c) Microsoft Corporation. All right... 阅读全文
posted @ 2012-03-20 18:42 kcy-666 阅读(23721) 评论(1) 推荐(0)
摘要:今天要生成一个20G的单词文件,遇到数据边界的问题,这里记下。 要生成这个20G的文件,我首先从一个文件里面读取了一定量的单词,放在缓冲区里面,然后重复把这个缓冲区写入文件。这里我需要计算出循环的次数,如果这么写: __int64 k = 20; //20GB的文件需要循环的次数k = 20 * 1024 * 1024 * 1024 / nStrLen; //nStrLen:缓冲区字符... 阅读全文
posted @ 2012-03-20 16:27 kcy-666 阅读(4680) 评论(0) 推荐(0)
摘要:在《C++ primer》第16.4节有如下一段话: Ordinarily, when we use the name of a class template, we must specify the template parameters. There is one exception to this rule: Inside the scope of the class itself, we... 阅读全文
posted @ 2012-03-18 11:33 kcy-666 阅读(729) 评论(0) 推荐(0)
摘要:有如下继承关系的几个类:以下是类的相关代码://抽象基类:动物类class CAnimal{public: virtual void EatFood(string strSomething) = 0; virtual void Drink(string strSomething) = 0;};//CAnimal的派生类:CMammalclass CMammal : public CAnimal{public: virtual void EatFood(string strSomething) { cout << "CMammal::EatFood()" ... 阅读全文
posted @ 2012-03-15 12:47 kcy-666 阅读(2906) 评论(0) 推荐(1)