![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 79
arbboter
也曾梦想上天,还是默默无闻,而今迈步从头越
展开
-
ctypes结构体(Structure)通用格式化输出打印等
背景在使用python和c\c++混合编程的时候,我们通常使用python的ctypes方案,这时在编码过程中就免不了要与c的结构体struct打交道。在编码过程,尤其是调试中,我们有时需要便捷地查看或者日志打印结构体信息,如果我们按c的方式一个个结构体成员手工编码输出,这是比较复杂且费力的,因此有必要实现一种通用的结构体格式化输出的功能,便于查阅结构体对象信息。本文就是基于上述需求实现的一...原创 2019-10-26 14:20:48 · 5360 阅读 · 0 评论 -
程序的启动和退出过程详解
Windows支持两种类型的应用程序。一种是基于图形用户界面(GUI)的应用程序,另一种是基于控制台用户界面(CUI)的应用程序。 基于G U I 的应用程序有一个图形前端程序。它能创建窗口,拥有菜单,可以通过对话框与用户打交道,并可使用所有的标准“Wi n d o w s ”组 件。Wi n d o w s 配备的所有应用程序附件(如Notepad 、Calculator 和WordPad ),翻译 2015-03-06 11:09:44 · 4066 阅读 · 0 评论 -
排序-冒泡排序
思想冒泡排序基本思想是将n个记录看作按纵向排列,每趟排序时从下至上对每对相邻记录进行比较,若次序不符合要求就交换。每趟排序结束时都能使排序范围内关键字最大的记录象一个气泡一样升到表上端的对应位置,整个排序过程共进行n-1趟,依次将关键字最大、次大、第三大…的各个记录置于表的第一个、第二个、第三个… 位置上。原创 2014-07-10 22:33:11 · 1188 阅读 · 0 评论 -
排序-简单选择排序
思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止。例如:进行第i趟选择时,从当前候选记录中选出关键字最小的k号记录,并和第i个记录进行交换。基本实现代码for (int i=0; i<nLen-1; i++){ for(int j=i+1; j<nLen; j++) {原创 2014-07-13 09:33:55 · 1445 阅读 · 0 评论 -
构造函数的异常处理
试分析推断下述代码的输出结果:#include #include #include using namespace std;void* operator new(size_t size){ printf("my new -> %u\n", size); return malloc(size);}void operator delete(void *p){ printf("原创 2015-03-02 10:32:41 · 6035 阅读 · 0 评论 -
C\C++备忘录之关键字【static,const,extern】
static1.局部变量// 该变量生命周期不仅仅是进入该函数后,而是整个程序运行期间void foo(){ static int nVar = 0; printf("var = %d\n", ++nVar);}原创 2014-08-18 15:56:34 · 1365 阅读 · 0 评论 -
强制类型转换Demo
#include #include #include using namespace std;class A{public: int a; A() { a = rand(); } virtual void printf() { cout << a << endl; }};class B: public A{public: int b; B(原创 2014-07-18 09:32:51 · 1130 阅读 · 0 评论 -
空指针调用成员函数
试分析一下代码的运行情况即输出:#include using namespace std;class A {public: int m; void print() { cout << "A\n"; } void B() { int sum = 0; for (int i=0; i<100; i++) { sum += i; }原创 2015-03-02 16:20:05 · 3232 阅读 · 0 评论 -
公交余额查询(深圳通)
关于公交余额查询现在有一些公交卡支持网余额查询了,虽然支持的不多,但是不得不说,深圳通的余额还是很好查的。因为是匿名的公交卡,所以输入用户名、身份证之类的事没用的,需要输入的只是公交卡的号码即可。深圳通的余额查询网站是:深圳通网上查询,输入号码即可查询出卡的余额信息等,如下所示:还是很简单的,没有万恶的广告、没有万恶的验证码!!这篇文章讲得是如何根据这个网页编写自己的程序实原创 2015-02-04 23:31:45 · 7004 阅读 · 0 评论 -
古典密码学
古典密码学种类移位密码(凯撒密码) 对于一个密码体制,必须满足一定的条件,下面所述的两个条件必须的:对于加密体制而言,其加解密函数都要易于计算对于任何敌手而言,即使他获取了密文Y,也很难由此确定出对应的密钥K或密文 移位密码属于最简单的一种加密方法,其实现和原理都很简单,但是由于本身的问题,其密钥空间很小,而且又属于单表替换,所以安全性不高,原创 2014-05-09 19:31:03 · 2160 阅读 · 0 评论 -
城市行--求网格中的可达路径数
今天遇到的一个题目,题目描述大概是这样的:有一个城市东西方向有四条平行且间距相同的道路,南北方向有六条平行且间距相同的街道,这几条道路横穿贯通整个城市,现有一个人从城市的最西南角想到城市的最东北角上去,且只往东或者往北方向走,求有多少种方案?当时画了下图,想到了用递归方法,不过因为时间问题没有深想,也想到了用穷举法,不过最后还是没有做出来。题中所述可转化为下图:也就原创 2015-03-07 21:59:43 · 4020 阅读 · 0 评论 -
C\C++小知识汇总
类的大小空类(不含成员变量和虚函数):因为对象不可能不占内存,否则这个对象怎么存在,所以C++规定空类对象内存大小为1。 class EC{public: EC(){} ~EC(){}; void EC1() { printf("EC1\n"); }};class EVC{public: EVC(){} ~EVC(){}; void EVC1() { ...原创 2014-05-13 17:06:28 · 1899 阅读 · 0 评论 -
文章标题
C++调用Python脚本#include <Python.h>class CPyCall{public: CPyCall() { Py_Initialize(); // 检查初始化是否成功 if (!Py_IsInitialized()) { MD_COMM_LOG_ERR(-1, "Py_原创 2016-04-27 10:09:36 · 692 阅读 · 0 评论 -
libco协程示例-多协程任务代码(类似多线程)
libco协程示例-多协程任务代码(类似多线程)简介在我们平常的工作及测试过程中,涉及到多个任务并行工作时我们一般会考虑使用多线程方案,多线程的方案方便我们在同一个程序中并行执行多个任务,不仅可以一心多用,而且还可以有效地提升机器的使用效率。考虑到协程是一种更轻量级的多任务并行方案,因此我们在遇到允许使用多线程的时候不妨停下来想想,是不是可以使用协程替代线程,从而达到相同的效果。本文根据l...原创 2019-10-08 14:41:37 · 602 阅读 · 0 评论 -
libco源码学习解读
libco源码学习解读简介顺着上一篇文章示例,这里对文章中所涉及的函数及数据类型逐一进行深入分析,以期深入学习理解libco的实现原理,帮助我们加深对协程的理解,并帮助我们更加有效地使用libco协程库并排查问题。创建协程co_create该函数用于创建一个协程对象,其实现源码如下:int co_create(stCoRoutine_t** ppco, const stCoRoutine...原创 2019-09-26 16:16:01 · 619 阅读 · 0 评论 -
协程库libco学习使用入门示例
简介libco是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上。libco通过仅有的几个函数接口 co_create/co_resume/co_yield 再配合 co_poll,可以支持同步或者异步的写法,如线程库一样轻松。同时库里面提供了socket族函数的hook,使得后台逻辑服务几乎不用修改逻辑代码就可以完成异步化改造。libco是一个源码简洁而...原创 2019-09-25 17:32:09 · 6532 阅读 · 8 评论 -
Visual Studio 2019 + WSL + Linux(Ubuntu)程序配置开发
安装Visual Studio 2019在安装Visual Studio 2019时,需要勾选Linux开发环境选项,即勾选“使用C++的Linux开发”工具集,如下图所示:创建Linux类型项目启动已经安装好的Visual Studio 2019,创建新项目选择,如下图所示:项目新建完成后,IDE已经自动帮我们编写完成一个HelloWorld的程序代码。因为程序需要在Linux上编译...原创 2019-09-25 17:27:07 · 15914 阅读 · 0 评论 -
C++新语法特性
0. 背景最近在学习过程中,不小心就发现一些不认识的C++语法和技巧,一查才发现我的认知已落后许久,随着C++的发展,很多新奇的高级编程语言技巧都已经被C++吸纳,而我的认知还一直在c++98停滞不前,惭愧。本章收集了一些比较常见的场景和技巧,记录学习笔记,持续更新中…auto – C++11auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型,类似的关键字还有decl...原创 2018-12-25 15:56:01 · 519 阅读 · 0 评论 -
C++11 异步编程示例-future
示例说明示例很简单,大致步骤为:调用异步函数async创建异步对象,返回结果为future类型合适的时候使用异步对象返回的future方法检测异步任务执行进度检测任务执行成功后,使用future的get方法获取异步任务执行结果代码示例:#include <future>#include <iostream>#include <string&...原创 2018-03-22 17:07:08 · 2522 阅读 · 3 评论 -
实用代码段整理
字符串截断 GBK编码的字符串,截取前n字节,且保证截取部分不包含半个汉字。std::string Substr(const std::string&amp; strSrc, const size_t&amp; nLen){ std::string strSub = strSrc.substr(0, nLen); if (strSub.length() &lt...原创 2016-11-28 19:26:48 · 698 阅读 · 0 评论 -
STL之erase
STL 中 erase 的那些坑 STL 中 erase 的坑估计不少人都踩过, 自认为已经免疫了, 结果最近又踩了次坑, 于是怒发此文 大多人肯定都是从最简单的坑踩过来的:some_container a;for(iterator it = a.begin(); it != a.end(); ++it){ if(shouldDelete(it)) {原创 2016-05-05 17:48:23 · 1018 阅读 · 0 评论 -
memmove函数实现
背景memcpy是我们最常用的数据拷贝函数,一般使用不会有啥问题,但是当涉及到目标区域的数据和源数据有数据重叠的时候,可能就会产生我们意想不到的拷贝结果。究其原因,memcpy是通过从头至尾的顺序拷贝方式实现,所以如果拷贝一开始就导致源数据区的数据被破坏(修改),那么拷贝结果就并不是我们预想到的数据数据拷贝了。在什么样的情况下会导致memcpy失效呢?这就得追本溯源了,我们知道memcpy的实现方式原创 2016-09-23 16:51:59 · 1863 阅读 · 2 评论 -
线程同步-临界区对象
1、临界区对象临界区是保证在某一个时间只有一个线程可以访问数据的方法。使用它的过程中,需要给各个线程提供一个共享的临界区对象,无论哪个线程占有临界区对象,都可以访问受到保护的数据,这时候其它的线程需要等待,直到该线程释放临界区对象为止,临界区被释放后,另外的线程可以强占这个临界区,以便访问共享的数据。2、主要的函数方法InitializeCriticalSection(&c原创 2015-01-19 09:42:56 · 2317 阅读 · 0 评论 -
内存管理分析
题目:分析下面代码的运行结果。#include char *GetMemory(){ char a[] = "hello,world"; /* char *a = "hello,world";//这样声明的话有效 */ return a; }int main(int argc, char *argv[]){ printf( "%s\n", GetMemory() )原创 2015-01-19 09:40:09 · 1732 阅读 · 0 评论 -
Linux的TCP基础编程
网络地址数据结构问题首先,先来说网络中的编程地址,不知有没有人发现在我们网络编程中不仅仅只有一个地址数据结构,而且很多时候我们在调用网络接口的时候还要强制转换参数的类型。对,我说的就是数据结构sockaddr和sockaddr_in这两货,而如果你足够仔细的话,你会发现,编程中我们使用的大部分是sockaddr_in,但是我们调用的网络接口却几乎都是(不知道有没有不是的啊,我木有去调查)soc原创 2015-01-14 23:03:00 · 2100 阅读 · 0 评论 -
VIM命令详解
关注Perl...关注软件测试随笔 - 137, 文章 - 0, 评论 - 22, 引用 - 0Vim命令合集命令历史以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim在命令行窗口中输入以下命令即可vim 直接启动vimvim filename 打开vim并创建名为filenam转载 2014-08-22 10:22:36 · 1105 阅读 · 0 评论 -
设置文件大小
HANDLE hFile1 = CreateFileA("F:\\2.log", FILE_GENERIC_READ | FILE_GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0, NULL); if(INVALID_HANDLE_VALUE != hFile1) { LARGE_INTEGER liSize = {1024*102原创 2014-08-07 09:23:15 · 1777 阅读 · 0 评论 -
gdb命令
rrun运行.程序还没有运行前使用c cuntinue 运行到下一断点处qquit 退出tabtab命令补全功能h help帮助sstep跟入函数nnext执行下一行的代码。如果是函数调用,也当作一行转载 2014-07-11 16:01:09 · 1011 阅读 · 0 评论 -
细微处的FILE结构体
FILE的结构体定义struct _iobuf { char * _ptr; // 下一次读取或者写入的地址 int _cnt; // 缓冲区剩余大小,每次fseek成功后,该值置0 char * _base; // 缓冲区基地址,没见过它修改过 int _flag; // 文件标识(文件打开方式,错误,Buf等信息) int _fil原创 2014-08-06 11:36:04 · 1394 阅读 · 0 评论 -
堆异常检测-MS-Visual Studio
在向系统申请堆空间的时候,虽然程序员不知道所申请的堆空间的数据结构,但是系统或者啥(微软可以知道)知道的,所以如果我们需要检查堆的使用异常,需要借助微软提供的机制来检堆的正常使用,从而发现在程序过程中出现的非法使用堆的情况,保证我们程序的高质量!这里面最重要的函数莫过于_CrtCheckMemory(),该函数使用简单,在需要测试堆异常的代码的开始和结束端分别调用即可。具体例子如下所示:#incl原创 2014-07-04 15:49:06 · 2058 阅读 · 0 评论 -
程序自动生成dump文件
作用可以再程序崩溃后保留崩溃现场,方便事后查找程序的崩溃原因。前提是奔溃程序所对应的代码和PDB文件都是匹配的(发布程序的时候,保留源代码和PDB文件)。代码示例原理是使用DbgHelp的自定义未处理异常来保留崩溃现场到文件的,使用直接包含该头文件,然后再main函数的开始就调用EnableAutoDump函数。// pro_dump.h// 包含本文件是原创 2014-05-29 09:59:32 · 3783 阅读 · 0 评论 -
MSVC查看类的对象内存布局
虽说自己对内存对象内存布局这一块还算比较熟悉(鄙人这么认为),但是实际要可视化一个内存布局,还是没做过,今天在网上瞎逛,突然发现了MSVC居然支持输出对象的布局结构,这个命令嘛,就是-d1reportSingleClassLayout和-d1reportAllClassLayout了。 顾名思义,前者用于输出指定名字的类的结构,后者则是输出全部的类的结构,试了下后面的命令,发现按原创 2014-06-09 10:17:49 · 1820 阅读 · 0 评论 -
枚举进程列表
#include "test1.h"#include #include #include "psapi.h"#pragma comment(lib, "psapi.lib")/************************************************************************//* 快照方式原创 2014-05-26 17:25:13 · 1458 阅读 · 0 评论 -
【3】QQ 聊天界面
1.说明稍微修改了下QQ示例里面的聊天界面界面,然后把代码扣过来完成了QQ聊天界面部分,效果还可以。2.代码部分// QQTalk.h文件#ifndef __QQ_TALK_H__#define __QQ_TALK_H__#include #include using namespace DuiLib;#define QQ_TALK_XML _T("ch原创 2014-05-19 20:41:12 · 2634 阅读 · 0 评论 -
【1】使用DuiLib准备
简介DuiLib是一个界面原创 2014-05-14 17:55:56 · 1586 阅读 · 0 评论 -
精准的计时类
class MyTimeCount{public: MyTimeCount() { QueryPerformanceFrequency(&fr); } ~MyTimeCount() { } void Start() { QueryPerformanceCounter(&bg); ed = bg; } float Stop() { QueryPerform原创 2014-08-23 09:54:08 · 1456 阅读 · 0 评论 -
简单的函数热点分析类
一个实现监视函数耗时和调用的lei原创 2014-08-26 10:36:39 · 1977 阅读 · 0 评论 -
C\C++控制台颜色设置类
windows和Linux都可用的一个类...用来设置颜色,没有太复杂,简单够用吧。#ifdef _WIN32#include class FontColor{public: FontColor() { m_hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); } void SetColor(int nColor) { SetConso原创 2014-08-27 16:07:17 · 2021 阅读 · 0 评论 -
Linux的UDP基础编程
UDP通信机制相比较于TCP通信,UDP通信是面向无连接的通信,所以没有TCP中的监听和连接等涉及面向连接的过程,UDP的主要通信过程如下图所示:相比较TCP通信,UDP相对而言比较简单,虽然UDP是无连接的通信,但是依然有服务器和客户端之分,且通信的时候直接指定对方地址即可,无视对方是否能收到你发送的消息。且UDP通信不再使用read/write发送消息和读取消息了,因为没有连接原创 2015-01-16 17:15:59 · 1968 阅读 · 0 评论 -
sqlite编程
概要 本章主要简示了C\C++接口的sqlite编程,包括了创建数据库文件、创建表、对数据的增删改查等。结果展示流程概要下载sqlite的源码,可将其编译成库使用,也可以直接加到工程里面使用。因为sqlite只有两个文件,所以我把它们直接放到工程里面编译关于sqlite的使用可参照文章sqlite基本使用方法程序退出时需要释放sql里面的内存原创 2014-12-11 12:45:24 · 1666 阅读 · 0 评论