
C++技术
goalcn
生活就像掷色子不努力就成不了赌王
展开
-
Java学习第一日
1. 文件里有public类,文件名必须以该类名命名 2. Hello World:public class HelloWorld{ public static void main(string[] args) { system.out.println("Hello World"); }}3. Dos命令: set classpath=. 表示设置原创 2008-07-18 21:37:00 · 711 阅读 · 1 评论 -
Endian的判断和转换
1.判断当前CPU使用哪种C++ Endian?2.如果当前数据的Endian和当前CPU相反,如何装换?代码相当直观:1.判断CPU的C++ Endian:union { short s; char c[sizeof(short)]; } un; un.s = 0x0102; _isLittleEnd = (un.c[0] == 0x2);转载 2014-01-15 22:53:43 · 871 阅读 · 1 评论 -
windows中静态库lib和动态dll的区别及使用方法
1. 静态库lib和动态dll的区别1.1 项目类型VS在建Win32项目时,有以下选项:windows应用程序控制台应用程序DLL静态库最后两个类型:DLL和静态库,这两种项目类型是不可以单独运行的,必须在Windows应用程序调用他们执行,是提供的库函数而已。1.2 两种lib的区别:(1)静态库(.lib)函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译...转载 2018-04-16 11:22:24 · 599 阅读 · 0 评论 -
VC下四中线程同步的比较
MFC专门封装了四个类用于实现线程同步。他们都继承自CSyncObject。 类名使用方法适用临界区CCriticalSection只需在线程函数中用CCriticalSection类成员函数Lock()和UnLock()标定出被保护代码片段即可。Lock()后代码用到的资源自动被视为临界区内的资源被保护。UnLock后别的线程才能访问这些资源。如果有多个线程试图同时访问临界区,那么 在有一个线程...原创 2018-04-11 10:42:02 · 153 阅读 · 0 评论 -
Vector线程同步问题
方法一:heads.reserve(2000);方法二:加锁:1头文件#include <pthread.h>2全局定义pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 3使用时:pthread_mutex_lock(&mutex);...pthread_mutex_unlock(&mutex); 4使用完毕pthre...原创 2018-07-11 13:14:31 · 990 阅读 · 0 评论 -
线程局部存储 TLS
本来想通过tid为索引建个表来实现该功能,没想到已经有现成的机制。。单个线程的特有数据,介于全局变量和局部变量之间。linux:方法一:int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));int pthread_key_delete(pthread_key_t key);void *pthread_getspe...原创 2018-07-11 18:50:06 · 244 阅读 · 0 评论 -
常用的字符串函数:判断数字,IP校验,strncpy安全版本
1.判断字符串是否全是数字或字母bool Isdigital(char* str){ if (!str) return false; return (strspn(str,"0123456789") == strlen(str));}bool IsDigital(string str){ if (str.empty()) r...原创 2018-07-23 22:25:35 · 295 阅读 · 0 评论 -
C++内存问题大集合(指针问题,以及字符串拷贝问题,确实挺危险的)
内存越界,变量被篡改memset时长度参数超出了数组长度,但memset当时并不会报错,而是操作了不应该操作的内存,导致变量被无端篡改还可能导致内存越界的函数有memset、memcpy、memmove、strcpy、strncpy、strcat、sprintf等等 临时指针问题,std::string、wstring的c_str()是个临时指针c_str()返回值是个char...转载 2018-07-30 11:12:42 · 585 阅读 · 0 评论 -
区分操作系统的一些宏
编码的时候经常要用到条件编译,每次都到网上去查比较浪费时间,今天总结一下以备后用编译器GCC#ifdef __GNUC__#if __GNUC__ >= 3 // GCC3.0以上Visual C++#ifdef _MSC_VER(非VC编译器很多地方也有定义)#if _MSC_VER >=1000 // VC++4.0以上#if _MSC_VER >=...转载 2018-07-30 17:21:12 · 227 阅读 · 0 评论 -
宏定义中的#号
一、#名称:字符串化操作符其作:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。使用条件:只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前举例:#define example1(instr) #instrstring str=example1(abc); 将会展成:string str="abc";注意:对空格的处理a、忽略传入参数名前面和后...转载 2018-07-27 12:35:51 · 1203 阅读 · 0 评论 -
windows 版本的snprintf实现
首先,windows下的snprintf和linux下的功能不一致;在VS2015时已经实现了安全的snprintf,在这之前可以采取下面两种方法1. 如果不在乎返回值,使用:#define snprintf(buf,len, format,...) _snprintf_s(buf, len, len-1, format, __VA_ARGS__)2.在乎返回值,使用:(VS20...转载 2018-07-31 14:59:36 · 1249 阅读 · 0 评论 -
STL string类的使用
1.慎用memcpystruct A{ string s; int i;};void fun(struct A* pSrc){ struct A pDest; memcpy(&pDest, pSrc, sizeof(struct A));} 问题在于,memcpy完全是按照内存基于第三个参数指定的字节数来拷贝,对于简单数据类型(非指针)...原创 2018-07-27 22:36:21 · 161 阅读 · 0 评论 -
ZMQ+VS2013的编译
从官网下载的ZMQ包4.2.3,提供了VS各个版本的项目文件但是看上去只有2015经过一些修改是好用的,2013直接编译必然报错1.修改2015的配置文件(主要是路径错误),然后全部拷贝到2013文件夹,替换2015到2013详见 https://blog.youkuaiyun.com/qq_37769473/article/details/80290606 2. 编译的时候,选择VS2013...原创 2018-08-01 17:47:28 · 683 阅读 · 0 评论 -
STL Map自定义排序——KEY字符串长度
比如针对STL MAP的KEY按照字符串长度排序,网上是这么写的struct CmpByKeyLength { bool operator()(const string& k1, const string& k2) { return k1.length() < k2.length(); } }; 但是如果你这么干,就会发现假如两个k...原创 2018-12-13 14:38:33 · 965 阅读 · 0 评论 -
StartServiceCtrlDispatcher时1063错误
https://docs.microsoft.com/zh-cn/windows/desktop/api/winsvc/nf-winsvc-startservicectrldispatcheraMSDN如上问题: 服务程序运行时发现在win10 64位机器总是出现1063ERROR_FAILED_SERVICE_CONTROLLER_CONNECT错误,服务列表里有但是运行后始终不起作用....原创 2018-12-20 12:35:21 · 3186 阅读 · 0 评论 -
Linux下gdb调试
简要方法1.编译时加上-g开关2.让系统生成core文件$ulimit -c unlimited (只对当前shell进程有效)或在~/.bashrc 的最后加入: ulimit -c unlimited (一劳永逸)3. 发生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行.gdb [exec file] [cor...转载 2019-01-04 15:01:10 · 197 阅读 · 0 评论 -
MFC 窗口的位置GetWindowRect/MoveWindow/Onsize等(转)
父对话框的整个窗口区=父对话框客户区+父对话框标题栏区1. GetWindowRect()获取的是以屏幕左上角为(0,0)点的窗口区域,是屏幕坐标系。① 如果对父对话框调用GetWindowRect(),那么获取的矩形为父窗口在屏幕中的区域,其中矩形区含标题栏以及外边框。② 如果对控件调用GetWindowRect(),那么获取的矩形是控件在屏幕中的区域。注意在对话框的OnIn...转载 2019-01-08 16:51:58 · 1570 阅读 · 0 评论 -
lib,dll,def,exp的信息
简要的介绍一下在微软开发工具中(VC)静态链接库和动态链接库生成过程中出现的.dll .lib .def 和 .exp文件类型。windows平台上可执行文件可能是一个.exe文件也可能四个.dll文件。当然也有一些比较特别的exe或者dll文件,不过他们有其他样式的后缀名比如屏保程序(.scr),ActiveX DLL 用的.ocx 还有各种驱动使用的各种扩展名。这里我们不讨论.com 和一些脚转载 2013-05-27 16:45:28 · 960 阅读 · 0 评论 -
lib和dll的关系
什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37) (1)lib是编译时需要的,dll是运行时需要的。 如果要完成源代码的编译,有lib就够了。 如果也使动态连接的程序运行起来,有dll就够了。 在开发和调试阶段,当然最好都有。 (2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是转载 2013-05-27 16:16:39 · 444 阅读 · 0 评论 -
互斥:软件方法实现之Peterson算法
德国数学家Dekker曾提出了两个进程互斥的算法,不过Dekker算法过于复杂。而Peterson提出了简单且一流的方法。实现如下:boolean flag[2];int turn;void P0(){ while(true){ flag[0]=true; turn=1; while(flag[1]&&turn==1)转载 2011-12-20 13:40:21 · 828 阅读 · 0 评论 -
Java学习第二日
1.面向对象编程和面向过程编程区别: 前者先确定数据结构,然后确定算法; 后者刚好相反.2.不能直接调用构造方法,必须使用new关键字来自动调用,从而创造对象实例.new的三个作用: a.为对象分配空间;b.调用构造函数;c.返回对象的引用.3.若未指定任何构造函数,则编译器会自动添加缺省构造函数,且对对象成员变量赋系统默认值(如int赋值为0).4.Java中也有this关键字,指原创 2008-07-24 23:28:00 · 586 阅读 · 0 评论 -
Java学习第三日
1.为了管理众多类,解决类重名问题,Java引入包Package的概念,实质上类似于操作系统中文件夹的作用.package语句必须在文件的第一行.文件夹的目录必须和包的层次结构一致.2.import java.io.File引入单个类,import java.io.*引入整个包,在同一包中的类无须引用.3.类希望被其他包的类引入访问,必须加上修饰符public,否则就是缺省default.原创 2008-07-28 15:20:00 · 587 阅读 · 0 评论 -
使用C#实现网站用户登录
下面是从cnblog深蓝处转载的一篇技术文章: 我们在写灌水机器人、抓资源机器人和Web网游辅助工具的时候第一步要实现的就是用户登录。那么怎么用C#来模拟一个用户的登录拉?要实现用户的登录,那么首先就必须要了解一般网站中是怎么判断用户是否登录的。HTTP协议是一个无连接的协议,也就是说这次对话的内容和状态与上次的无关,为了实现和用户的持久交互,网站与浏览器之前在刚建立会话时将在服务器内转载 2009-07-28 15:53:00 · 733 阅读 · 0 评论 -
使用C#登录带验证码的网站
我在上一篇文章中已经讲解了一般网站的登录原来和C#的登录实现,很多人问到对于使用了验证码的网站该怎么办,这里我就讲讲验证码的原理和对应的登录方法。验证码的由来几年前,大部分网站、论坛之类的是没有验证码的,因为对于一般用户来说验证码只是增加了用户的操作,降低了用户的体验。但是后来各种灌水机器人、投票机器人、恶意注册机器人层出不穷,大大增加了网站的负担同时也给网站数据库带来了大量的垃圾数转载 2009-07-28 15:56:00 · 789 阅读 · 0 评论 -
再论验证码安全:请及时销毁你的验证码
下面是从cnblog转载的一篇技术文章: 我在上一篇文章中讲到了如何使用C#模拟用户登录具有验证码网站。今天我就换位思考一下,站在网站开发人员的角度讲一讲验证码的的一个安全问题:及时销毁网站中的验证码。为了方便大家理解,这里我就以一个投票的应用网站为例进行说明。投票网站首先要防止的就是用户不断点击投票按钮来重复投票;当然,避免重复投票的解决办法有很多,比如记录IP、写入Session、转载 2009-07-28 15:55:00 · 748 阅读 · 0 评论 -
C#网站登录学习笔记(一):登录简单网站
最近在园子里看到 深蓝 写的几篇关于网站登录的文章,觉得挺好玩,挺感有趣的,遂决定学习一下。但凡学习都有一个渐进的过程,以下是自己初步制定的学习步骤: 1. 在本地创建一个简单的网站,尝试用C#登陆; 2. 在网上找一个不需要验证码就可以登录的网站,尝试用C#登陆; 3. 在网上找一个需要验证码才能登录的网站,尝试用C#登陆 一、创建最简单的测试网站:该网站只包含两个页面:转载 2009-07-28 15:58:00 · 1674 阅读 · 0 评论 -
DEFINE_GUID的作用
#ifndef DEFINE_GUID#error initguid: must include objbase.h first.#endif#undef DEFINE_GUID#ifdef _MAC#define __based(a)#endif#ifdef _WIN32#define __based(a)#endif#ifdef __TURBOC__#define __based(a)#endif#ifndef _MAC#define DEFINE原创 2010-06-24 22:09:00 · 6491 阅读 · 1 评论 -
关键字Const与Volatile的使用
<br />Const<br /> <br />我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章转载 2011-06-02 16:55:00 · 404 阅读 · 0 评论 -
指向函数的指针(自C++Primer )
函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关://pf points to function returning bool that takes two const string referencesbool (*pf)(const string&, const string&);这个语句转载 2011-06-04 20:29:00 · 908 阅读 · 0 评论 -
Overload,Override和Overwrite
1 overload (重载) 同一作用域内,函数名相同,参数列表不同的多个函数,构成重载。 仅返回值类型不同,不足以构成重载函数,比如: int Func(int iIndex); // —— ① int Func(std::string strIndex); // —— ② void Func(int iIndex); // —— ③转载 2011-06-10 19:43:00 · 709 阅读 · 0 评论 -
C/C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 一、面向过程设计中的static全局变量、局部变量、静态全局变量、静态局部变量的区别 C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用转载 2011-06-09 22:43:00 · 555 阅读 · 0 评论 -
C++拷贝构造函数之深拷贝、浅拷贝
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include using namespace std;class CExample {private: int a;public: CExample(int转载 2011-06-11 21:59:00 · 380 阅读 · 0 评论 -
C++中Struct与Class的区别
从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别: (一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理; (二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。 除了这两点,class和struct基本就是一个东转载 2011-06-10 21:05:00 · 404 阅读 · 0 评论 -
memcpy引起的一个bug
void *memcpy(void *dest, const void *src, size_t n);由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。memcpy(dest,0,5);真正应该使用的是memset(dest,0,5);关于memset: memset()函数把从开始地址为dest,长度为n的内存区域内的每个字节都设原创 2011-11-16 23:29:54 · 1261 阅读 · 0 评论 -
Big endian and Little endian
谈到字节排序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。ARM同时支持 big和little,实际应用中通常使用little endian。那么究竟什么是big endian,什么又是little e转载 2011-11-20 23:18:17 · 365 阅读 · 0 评论 -
MSB与LSB,big endian与little endian
Most Significant Bit, Last(Least) Significant Bit最高有效位(MSB) 指二进制中最高值的比特。在16比特的数字音频中,其第1个比特便对16bit的字的数值有最大的影响。例如,在十进制的15,389这一数字中,相当于万数那1行(1)的数字便对数值的影响最大。比较与之相反的“最低有效位”(LSB)。MSB高位前导,LSB低位前导。谈到字转载 2011-11-20 23:10:53 · 1745 阅读 · 1 评论 -
CDockablePane使用技巧
1.默认叠加的tab标签是在下面,如何能显示到上方CTabbedPane::m_bTabsAlwaysTop = true;2.自定义多个Pane叠加在一起的tab样式CTabbedPane::m_StyleTabWnd = CMFCTabCtrl::STYLE_3D_ONENOTE;还需要进一步自定义的话:新建一个子类CTAB继承自CMFCTabCtrlCTabbedPa...原创 2019-05-27 15:43:14 · 1111 阅读 · 0 评论