![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技术心得
CavanWang
这个作者很懒,什么都没留下…
展开
-
关于strcpy的面试问题
这个简单的函数可能是c/c++面试中被问到最多的了,网上有很多说明是不全面的,甚至是最核心的没有点到。以下看法仅仅是自己个人看法。1.为何strcpy要返回指针?可以方便级联调用,而且可以用于判断函数是否成功。比如if(!strcpy(dst,src){....},或者 strcpy(dst,src)[strlen(dst)]='a'等等2.strcpy实现的注意点有哪些?(1原创 2013-04-12 13:57:30 · 961 阅读 · 0 评论 -
sizeof运算求结构体大小
首先有几条规则:1. 结构体的成员相对于结构体的偏移量,是该成员所包含的最大简单类型(指占用内存数)的整数倍(如果该成员本身又是一个结构体,就要递归查找其简单类型,简单类型就是char short int float double,long) 比如struct a1{ char a[5]; int b; }aa; struct a2{原创 2013-04-09 15:50:51 · 3431 阅读 · 0 评论 -
解析xml
#include #define ch_not_spec(x) ((x) != '/' && (x) != '')struct XML_NODE{char name[64];char* property_start;char* property_end;int over_type;int type;std::vector child_list;原创 2015-08-01 18:43:01 · 645 阅读 · 0 评论 -
dll文件和lib文件
参考了这篇文章http://www.cppblog.com/amazon/archive/2009/09/04/95318.html,http://wenku.baidu.com/view/d9a6520e7cd184254b3535b4.html做个简明总结。我们在程序中使用“pragma comment(lib, "a.lib")这个不一定是静态链接,这个只是告诉编译器,a.lib中包含我原创 2013-06-16 12:05:13 · 765 阅读 · 0 评论 -
今天自学一些逆向的基础知识,看了xchg指令,写了一个简单的 临界区 demo
拷贝一下代码,留作自己备份吧,不zhushi原创 2014-07-07 18:44:50 · 815 阅读 · 0 评论 -
晓说智能指针shared_ptr为何可以实现跨模块分配和释放内存
虚函数在解决跨模块内存分配释放中的体会原创 2013-07-25 21:45:11 · 6094 阅读 · 1 评论 -
vsvim--今天突然发现有个vs插件vsvim,仿真linux vim的各种键盘编辑文件
可以使用跟vim几乎完全一样的功能,比如快速定位到文件某个位置,删除单词,不用在点鼠标啦原创 2013-06-28 18:09:59 · 1312 阅读 · 0 评论 -
求结构体内成员的偏移和size的宏
#define MEMB_OFFSET(tp, mb) ((unsigned int) (&((tp*)0)->mb))#define MEMB_SIZE(tp, mb) ((unsigned int) (sizeof( ((tp*)0)->mb ) ) )原创 2013-06-25 10:17:29 · 702 阅读 · 0 评论 -
c++ explicit
网上找的解释http://www.thinkcode.cn/post/441.html在C++中explicit修饰一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),explicit构造函数是用来防止隐式转换的。转载 2013-06-19 15:20:14 · 631 阅读 · 0 评论 -
判断四个扑克是否能算出24点
int can24(double * data, int count, double shouldVal){ #define fabs(x) ((x) /*判断4个数按照两个两个分组,分别计算出两个值,然后再根据两个值计算一下看看能不能构成shouldVal,这个x表示其中两个构成的一对计算出的值,然后pairshould判断另外两对计算的值能否跟之前计算的x算得shoul原创 2013-06-15 18:38:00 · 2651 阅读 · 0 评论 -
惊叹,交换操作竟然可以不借助第三个中间数
今天在读《程序员的自我修养》时,第四章讲静态链接的开头,给出的实例程序中,有一个函数swap函数这样写的:void swap(int * a, int* b){ *a ^= *b ^= *a ^= *b;}叹为观止啊,我们通常想,先把a=b赋值,如果不借助第三方数,此时剩余信息已经只是关于原先的b的信息了,而上述代码则相当于:a = a' # b', b = (a'原创 2013-05-08 10:29:54 · 778 阅读 · 3 评论 -
可变参数的函数的原理及其简单模仿
可变参数的定义是类似这样的:void _cdecl myfun(char * fmt, ...){...}这里的fmt主要是为了能够识别后面到底有几个参数及其类型的,否则编译器是无法判断函数参数个数的。由于参数的个数可变,所以也只有c调用风格的函数可以实现它,因为只有c调用风格的函数,参数的传递是由调用者负责的,而stdcall是由函数自身负责的。win32 api都是stdc原创 2013-05-07 12:43:50 · 632 阅读 · 0 评论 -
c++的全局变量和size_type
全局变量的使用不使用任何修饰符:这样的情况就是定义全局的变量,注意,是定义,这意味着,其他地方不能再出现声明式或者定义式了。所以,如果你是在头文件使用这种方式,那么这个头文件只能被一个cpp文件包含,否则多个cpp文件包含它,就会在链接时报符号重定义错误,因为每个cpp都自己给自己的obj中定义了这个符号。这时,就要考虑使用extern方式了。使用extern方式:1.原创 2013-05-16 13:55:09 · 912 阅读 · 0 评论 -
一句话说明浮点数为何不能直接 if(f== 0.0)这样判断
float f = 0.33f * 0.2f;if(f - 0.066f == 0.0f)f = 0;这个是来自csdn论坛的一个帖子,说的比较简单明了。这里是不会走到f=0这个地方的,因为浮点数是底数+指数的存储,计算机并不能连续存储指定精度宽度内的所有浮点数。上述例子中,f第一次计算结果不是0.066,是比0.066稍大的一个数f = 0.066000007,傻眼了吧,呵呵。当然,翻译 2015-07-23 22:20:11 · 4361 阅读 · 0 评论