C/C++
文章平均质量分 80
guang11cheng
这个作者很懒,什么都没留下…
展开
-
strncpy,snprintf,strnlen的用法
1,不使用strcpy和sprintf,它们可能导致缓冲区溢出 2,strncpy的用法char *strncpy(char *dest, const char *src, size_t n);标准用法:src串的长度应该小于dest缓冲区的大小,且n为dest缓冲区的大小减1或者更小,即至少留出一个位置给'\0'。(如果src串的长度大于或等于dest缓冲区的大小,则n应该为de原创 2010-06-09 12:32:00 · 4512 阅读 · 0 评论 -
vector的reserve和resize的区别
vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity,同时也增加了它的size!原因如下:reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,转载 2012-08-06 15:55:53 · 594 阅读 · 0 评论 -
numeric_limits
#include std::numeric_limitsnumeric_limits::digits是指type的位数。numeric_limits::max() type的最大值。numeric_limits::min() type的最小值转载 2012-08-06 18:18:38 · 513 阅读 · 0 评论 -
怎样破坏程序的堆栈?
为什么使用堆栈? 现代计算机被设计成能够理解人们头脑中的高级语言。 在使用高级语言构造程序时最重要的技术是过程(procedure)和函数(function)。 从这一点来看, 一个过程调用可以象跳转(jump)命令那样改变程序的控制流程, 但是与跳转不同的是, 当工作完成时, 函数把控制权返回给调用之后的语句或指令。这种高级抽象实现起来要靠堆栈的帮助。 堆栈也用于给函数中使用的局部变量动转载 2012-08-16 10:31:43 · 11235 阅读 · 0 评论 -
static_cast与c风格的强制类型转换
class A{ int a;};class B{ int b;};class C : public A{ int c;};int main(){ B b; C c; A* p1 = (A*) &b; // 这句是c风格的强制类型转换,编译不会报错,留下了隐患原创 2012-09-12 09:56:10 · 4353 阅读 · 0 评论 -
multimap使用lower_bound、 upper_bound、 equal_range进行特定key的遍历
/** * multimap 操作lower_bound、 upper_bound、 equal_range */#include #include #include using namespace std;int main(){ //定义 multimap 对象 author multimap author; //第一个转载 2012-09-22 16:29:19 · 6218 阅读 · 2 评论 -
CAS compare and swap lock free
CAS compare and swap lock freehttp://blog.csdn.net/chenziwen/article/details/6050140转载 2012-09-25 19:01:12 · 1042 阅读 · 0 评论 -
ICU4C-C++国际化组件库
ICU4C是ICU在C/C++平台下的版本, ICU(International Component for Unicode)是基于"IBM公共许可证"的,与开源组织合作研究的, 用于支持软件国际化的开源项目。ICU4C提供了C/C++平台强大的国际化开发能力,软件开发者几乎可以使用ICU4C解决任何国际化的问题,根据各地的风俗和语言习惯,实现对数字、货币、时间、日期、和消息的格式化、解析,对字符转载 2012-11-19 16:14:19 · 1412 阅读 · 0 评论 -
诡异浮点数
看下面一段代码:void test(){ float f1 = 0.1f; float f2 = 1.0f; int i = 6900; float f = i * (1 - f1 * f2); int x = (int) (i * (1 - f1 * f2)); int y = (int) ceil(i * (1 - f原创 2012-12-11 14:40:31 · 410 阅读 · 0 评论 -
gtest
#include #include using namespace std;//////////////////////////////////////////////////////////////////////////// 简单示例int Foo(int a, int b){ if (a == 0 || b == 0) {原创 2011-10-05 11:39:10 · 7272 阅读 · 0 评论 -
cmake
1, 生成最简单的可执行程序当前目录下一个文件main.cpp,内容如下:#include int main(){ std::cout return 0;} CMakeLists.txt文件位于当前目录下,内容如下:project(main)cmake_minimum_required(VERSION 2.8)add_definit原创 2012-04-09 15:30:56 · 849 阅读 · 0 评论 -
XML概念与解析库
XML文件解析库:(C/C++)名称 访问接口 是否支持验证 备注Expat SAX/Local 不清楚 Local指它还有一套自己访问模型LibXML2 SAX/DOM 验证 TinyXml DOM 否转载 2012-04-27 10:28:20 · 871 阅读 · 0 评论 -
fstream
在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器( 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout2、析取器(>>) 从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以转载 2012-05-07 21:43:55 · 686 阅读 · 0 评论 -
静态库、共享库、动态库的创建和使用
通常库分为:静态库,共享库,动态加载库,。下面分别介绍。一、 静态库:1.概念: 静态库就是一些目标文件的集合,以.a结尾。静态库在程序链接的时候使用,链接器会将程序中使用 到函数的代码从库文件中拷贝到应用程序中。一旦链接完成,在执行程序的时候就不需要静态库了。 由于每个使用静态库的应用程序都需要拷贝所用函数的代码,所以静态链接的文件会比较大。2转载 2012-05-07 21:57:44 · 678 阅读 · 0 评论 -
C++中通过溢出覆盖虚函数指针列表执行代码
1. C++中虚函数的静态联编和动态联编 2. VC中对象的空间组织和溢出试验 3. GCC中对象的空间组织和溢出试验 4. 参考 C++中虚函数的静态联编和动态联编 C++中的一大法宝就是虚函数,简单来说就是加virtual要害字定义的函数。 其特性就是支持动态联编。现在C++开发的大型软件中几乎已转载 2012-05-12 21:42:17 · 1399 阅读 · 0 评论 -
临时对象作为函数返回值返回的分析
代码如下:#include using namespace std; class CDemoClass {private: char m_szName[20];public: CDemoClass() { cout }; CDemoClass(const c原创 2012-05-12 16:56:33 · 948 阅读 · 0 评论 -
虚表vtbl
普通函数的处理:一个特定的函数都会映射到特定的代码,无论时编译阶段还是连接阶段,编译器都能计算出这个函数的地址,调用即可。 虚函数的处理:被调用的函数不仅依据调用的特定函数,还依据调用的对象的种类。通常是由虚函数表(vtable)来实现的。虚函数表的结构:它是一个函数指针表,每一个表项都指向一个函数。任何一个包含至少一个虚函数的类都会有这样一张表。需要注意的是vtable只包含虚函数的原创 2012-05-12 16:59:49 · 1106 阅读 · 1 评论 -
函数对象
Bjarne Stroustrup的解答已经非常经典了——在某种方式上表现得象一个函数的对象。典型地,它是指一个类的实例,这个类定义了应用操作符operator()。 一个类对象,表现出一个函数的特征,就是通过“对象名(参数列表)”的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的operator()(...)来实现的。比如,对于调用int s = sum(1原创 2012-01-01 09:39:24 · 653 阅读 · 0 评论 -
在宏中定义变量是危险的
先看如下的宏定义:#define CAN_PLUS(_CurVal, _Delta, _MaxVal)\({\ bool bRet = false;\ if ((_CurVal) {\ const int32 i32Delta = (_MaxVal) - (_CurVal);\ if ((int32) (_Delta)原创 2012-06-25 15:30:04 · 867 阅读 · 0 评论 -
C语言中的宏是怎么展开的?
展开流程伪码:(自己总结的,不一定对)//loop: //将实参代入文本中//if 在某个实参之前有符号“#”(字符串化)或“##”(连接)then// 对当前的文本做一次字符串化或者连接//// if 结果是另外一个宏名 then// 替换一次// end//// 结束当前的处理//else// fore原创 2012-08-30 19:43:26 · 3855 阅读 · 0 评论 -
C语言宏定义##连接符和#符的使用等等
1,关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:#define WARN_IF(EXP) do{ if (EXP) fprintf(stderr, "Warning: " #EXP "\n"); } while(0)那么实际使转载 2012-04-29 10:25:45 · 627 阅读 · 0 评论 -
valgrind 做常态内存泄露的检查
valgrind是检测内存泄露的比较好的开源项目:http://valgrind.org/docs/download_docs.html,这是其官方帮助文档,比较全面另外有个网友写的博文介绍如何使用valgrind,不错,大家可以参考:http://blog.csdn.net/zhoujunyi/archive/2007/09/11/1780749.aspx应该把内转载 2012-12-18 17:37:40 · 2972 阅读 · 0 评论 -
非root不能gdb attach的限制
Could not attach to process. If your uid matches the uid of the targetprocess, check the setting of /proc/sys/kernel/yama/ptrace_scope, or tryagain as the root user. For more details, see /etc/s转载 2015-02-12 19:40:34 · 4507 阅读 · 0 评论 -
google_cpp编程规范要点整理
文件夹名一律小写,单词之间用下划线连接。文件名一律小写,单词之间用下划线连接。源文件名以.cpp结尾,头文件名以.h结尾,接口头文件名以_interface.h结尾。头文件#define保护的格式:#define 工程名_文件夹名1_子文件夹名2_头文件名_H_,全部大写,单词之间用下划线连接。头文件,特别是接口头文件中,不是必须用#includ原创 2015-07-18 10:51:53 · 990 阅读 · 0 评论 -
nginx_fast cgi_c++整理
1.介绍 Nginx - 高性能web server。 FastCGI程序 - 常驻型CGI(Common Gateway Interface)程序,它是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。 Nginx要调用FastCGI程序,需要用到FastCGI的进程管理器,Nginx本身没有集成类似的模块,我们转载 2015-10-09 14:50:25 · 1703 阅读 · 0 评论 -
git pull/push时候总提示输入账号密码 - 免除设置
linux下1. 在~/下, touch创建文件 .git-credentials, 用vim编辑此文件,输入: https://{username}:{password}@github.com2. 在终端下执行 git config --global credential.helper store3. 可以看到~/.gitconfig文件,会多了一项:转载 2016-01-18 16:54:25 · 19351 阅读 · 2 评论 -
file-max与ulimit的关系与差别
1. file-max的含义man proc,可得到file-max的描述:/proc/sys/fs/file-max This file defines a system-wide limit on the number of open files for all processes. (See also setrl转载 2016-05-10 13:51:03 · 3927 阅读 · 0 评论 -
手动释放Linux内存
1. 执行sync命令sync说明:使用sync命令以确保文件系统的完整性,sync 命令运行 sync 子例程,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。2. 修改/proc/sys/vm/drop_cachesecho 3 > /proc/sys/vm/drop_caches说明:Writing t转载 2016-12-26 13:55:52 · 425 阅读 · 0 评论 -
linuxmint18/ubuntu16.04LTS上搭建cocos2d-x-3.14.1安卓开发环境
linuxmint18上搭建cocos2d-x-3.14.1安卓开发环境第一部分 python和java基础环境1,系统自带python 2.7,不用额外安装2,系统自带openjdk-8-jre,安装一下jdk:sudo apt-get install openjdk-8-jdk第二部分 cocos2d-x-3.14.1自身的编译、测试原创 2017-03-07 17:47:10 · 1283 阅读 · 0 评论 -
linuxmint18上cocos2dx protobuf2.6.1编译、使用方法
在linuxmint18上用ndk编译android版本的protobuf1,在github上下载protobuf-2.6.1.tar.gz,解压2,cd; mkdir -p protobuf/jni拷贝protobuf-2.6.1目录下的src文件夹到jni目录下在jni目录下新建Android.mk文件,内容如下:LOCAL_PATH := $(ca原创 2017-04-06 14:36:24 · 918 阅读 · 0 评论 -
cmake scope
As mentioned in the documentation of the set command, each directory added with add_subdirectory or each function declared with function creates a new scope.The new child scope inherits all variable转载 2014-07-24 10:53:06 · 982 阅读 · 0 评论 -
gcc的-W选项
/home/huanggc/Funshion/BJGame2014/atlas/SrvProj/GameSrv/Modules/InteractSystem/Src/ToLuaAPIWrap.cxx: In function 'void SWIG_Lua_add_class_instance_details(lua_State*, swig_lua_class*)':/home/huanggc原创 2014-04-08 19:02:10 · 3521 阅读 · 0 评论 -
在linux上编译tolua++-1.0.93
1,首先安装cmake2.8版本和lua5.1版本(cmake的安装直接用sudo apt-get install cmake即可,lua5.1的安装要下载源码,然后make linux,sudo make linux install。注意在安装lua之前要安装两个库:sudo apt-get install libncurses5-dev libreadline-dev ),tolua++-1.原创 2012-05-01 15:38:07 · 2820 阅读 · 1 评论 -
swig+lua初步(c++)
1,lua使用5.1版本,swig-2.0.9还不支持lua5.22,下载swig-2.0.9编译安装,会报一个找不到pcre的错误,需要另一个包pcre-8.32.tar.gz,先安装这个包3,将swig Example lua下的simple和functest两个例子合并,如下:// simple.cpp/* A global variable */double Foo =原创 2012-12-26 21:29:49 · 4034 阅读 · 0 评论 -
pclint相关
1,类成员函数在重载时的默认参数问题:class XA{public: virtual void f(int a = 1) = 0;};class XB : public XA{public: virtual void f(int a = 2) { std::cout }; XA* p = new XB; p-原创 2013-05-31 16:54:47 · 811 阅读 · 0 评论 -
格林尼治秒可以跑多久?
格林尼治时间指的是从1970年1月1日开始算的秒数,如果用uint32类型来保存这个值,程序能跑多久才会溢出呢? unsigned int max_u32 = 0xffffffff; float x1 = (max_u32 - time(NULL)) / (365 * 24 * 60 * 60); // 93年,这是我运行时候的结果,即从我运行程序的时候(2012年的某一天)起原创 2012-09-22 15:31:22 · 1032 阅读 · 0 评论 -
gmock
gtest其实是googlemock(简称gmock)的一个模块,gmock的下载包中包含gtest。gmock的主页为:http://code.google.com/p/googlemock/三篇学习文章:1,http://code.google.com/p/googlemock/wiki/ForDummies2,http://code.google.com/p/googlemo原创 2012-01-01 10:18:48 · 15893 阅读 · 0 评论 -
(转)gcov-代码覆盖分析工具
gcov是一个分析代码覆盖率的工具,包括语句覆盖、分支覆盖。它可以报告每一行语句的执行次数、每个分支的执行概率。gcov程序调用的格式为:gcov [options] sourcefilelist待分析的程序源码:bubblesort.cpp#include void bubbleSort(int list[], int size){ int i, j,转载 2013-12-09 17:57:52 · 1224 阅读 · 0 评论 -
(转)gprof-性能分析工具
借助gprof可以获得C程序运行期间的统计数据,例如每个函数耗费的时间,函数被调用的次数以及各个函数相互之间的调用关系。gprof可以帮助我们找到程序运行的瓶颈,对占据大量CPU时间的函数进行调优(gprof统计的只是CPU的占用时间,对I/O瓶颈貌似无能为力,耗时甚久的I/O操作很可能只占据极少的CPU时间)。gprof的使用非常简单,在编译链接的时候加上"-pg"选项,然后按照正常方式运行转载 2013-12-09 17:13:14 · 988 阅读 · 0 评论 -
编译安卓版flatbuf1.6.0
Application.mk文件中:APP_ABI := armeabi armeabi-v7a x86在Android.mk文件中,添加:LOCAL_LDLIBS += -latomic原创 2017-04-21 16:42:50 · 724 阅读 · 0 评论