C/C++
hhhuang1991
生命本没有意义,你要能给他什么意义,他就有什么意义.与其终日冥想人生有何意义,不如试用此生做点有意义的事<胡适>。
展开
-
Windows下使用iconv
资源下载官网资源: https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz环境配置编译环境:Win7 64位系统 VS2015创建一个VS2015项目,应用程序类型使用静态库,注意取消勾选“使用预编译头”;将资源[libiconv-1.16\lib]文件夹下的所有文件,全部复制到第一步创建的工程目录下,并找到config.h....原创 2019-11-18 00:47:05 · 6672 阅读 · 1 评论 -
C++实现单向链表的增加、删除、读取功能
链表相比于数组的优势有: 1. 增加和删除元素效率非常高; 2. 可以不需要预先知道存储元素的数量。 相比于数组的劣势有: 1. 查找元素的效率低; 2. 由于存储额外节点指针,带来的空间消耗。采用C语言形式实现插入和删除两个函数//插入元素bool InsertNode(Node* p, int index, int data){ Node* pCur = p;...原创 2018-04-05 22:16:45 · 2324 阅读 · 0 评论 -
strcpy函数在VS2015中无法使用
微软认为strcpy函数的安全性比较差,容易出现内存泄露,所以强制要求使用strcpy_s函数代替strcpy函数。但是,微软还是提供了使用strcpy的办法,根据错误提示:“To disable deprecation , use _CRT_SECURE_NO_WARNINGS”,意思是我们可以不进行兼容性检查,常见的两种解决方法: 1. 我们可以在项目-属性-配置属性-c/c++-预处理器-...原创 2018-04-05 22:36:29 · 4341 阅读 · 0 评论 -
自定义String类模型
//MyString.h#pragma once#include <iostream>class MyString{public: MyString(const char* str = nullptr); MyString(const MyString& other); MyString& operator=(const My...原创 2018-04-05 23:10:10 · 257 阅读 · 0 评论 -
C++父子类中关于继承的一些问题
一、 子类能够从父类继承哪些内容?除了父类的构造函数和析构函数外,其余public和protected作用域的成员都能被子类继承:子类不能从父类继承的有:普通构造函数、拷贝构造函数、析构函数;子类能够从父类继承的有:静态成员变量、静态成员函数、友元函数、赋值操作符重载函数。二、关于静态成员的几个问题1. 子类如何调用父类的静态成员? 父类名::成员 子类名:成员 子对...原创 2018-05-03 11:33:54 · 883 阅读 · 0 评论 -
区分const char* p,char* const p
我们从常规的指针开始,char* p = new char[5]; //在内存中申请5个字节的空间,并将空间地址赋给指针变量p指针变量p可以保存一个内存地址值,还可以去操作这个内存地址对应位置的内容,使用解引用操作符*,用*p表示。由此可见,通过指针变量p,就可以对内存进行读写操作。有时候,我们只需要读取某个内存的内容,而不需要去改变它,这样我们可以通过const修饰符去限定,以免造...原创 2018-05-03 14:21:57 · 665 阅读 · 0 评论 -
用正则表达式去掉C++中的注释内容
C++中的注释内容,有两种样式: // 和 /* */ 针对这两种样式,正则表达式可以为\/\*[\s\S]*\*\/|\/\/.*\/\*[\s\S]*\*\/可以识别/* */整块注释, \/\/.*可以识别//单行注释 在支持正则表达式替换的编辑器(VS, Source Insight4.0)中,将匹配这段正则表达式的内容替换为空格,即可!...原创 2018-09-10 13:05:25 · 3071 阅读 · 2 评论 -
显示调用DLL出现126错误
显示调用DLL,特别要注意的是,DLL的路径和函数的名称。如果DLL的路径没有问题,还是出现126错误(未指定的模块),一般可能是该DLL需要依赖某些其他DLL库,特别是MFC类型的DLL,当采用动态编译时,就会因为缺少mfc140u.dll和msvcp140.dll(VS2015 DEBUG编译环境)库而出现失败。...原创 2018-10-24 16:43:31 · 8843 阅读 · 0 评论 -
一维码和二维码开源库zint学习
一、资源下载二、环境搭建三、简单示例四、开发应用1、zint_symbol解析zint_symbol结构体的定义位于zint.h文件中,详细说明见如下表格变量名称类型含义默认值symbologyinteger条码类型(详细见zint.h声明)BARCODE_CODE128heightinteger条码的高度 ,详细参考注意第一点50whi...原创 2018-11-07 10:57:23 · 4901 阅读 · 3 评论 -
C/C++中结构体中的冒号-位域
C++中位域的形式:struct st1{ unsigned int a:2; unsigned int b:3; unsigned int c:4;};struct st2{ int a:16; int b:17;};struct st3{ int a:2; int b:3; int c:4;}...原创 2018-11-27 15:15:19 · 1217 阅读 · 0 评论 -
C++中模块(Dll)对外暴露接口的几种方式
转载自:https://www.cnblogs.com/weiym/archive/2012/08/29/2662559.html总结下C++中模块(Dll)对外暴露接口的方式:(1)导出API函数的方式这种方式是Windows中调用DLL接口的最基本方式,GDI32.dll, User32.dll都是用这种方式对外暴露系统API的。这种方式的优点是导出函数没有语言限制,什么语言都能调用;...转载 2019-04-01 08:54:03 · 3050 阅读 · 0 评论 -
strcpy函数实现
strcpy函数实现strcpy函数的原型为:char* strcpy(char* _Dest, const char* _Source);//实现1char * strcpy(char* _Dest, const char* _Source){ //检查传入参数的有效性 assert(NULL != _Dest); assert(NULL != _Sour...原创 2018-04-15 23:24:45 · 25576 阅读 · 5 评论 -
三种排序算法(直接插入、冒泡、快速)的C++实现
直接插入基本思想:将整个队列分为有序区和无序区,然后依次从无序区中选择一个数,按大小顺序插入到有序区中去。图解示意如下, 代码实现//从小到大排序void InsertSort(int arr[], int len){ int temp = 0; //作为对比的临时数据 //无序区遍历 for (int i = 1; i < len; i++)...原创 2018-04-08 11:50:55 · 601 阅读 · 0 评论 -
获取WORD的高位字节和低位字节
在WinDef.h中有这样两组宏定义:#define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff))#define HIBYTE(w) ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))LOBYTE(w)的作用是,获取WORD的低位字节;HIBYTE(w)的作用,获取WORD...原创 2018-04-07 19:14:27 · 5902 阅读 · 0 评论 -
C++全局变量在多个源代码文件中的使用
在比较大的项目中,如果需要使用全局变量,那么就需要注意一些全局变量声明、使用不当引起的问题了。本篇文章主要内容有两个:普通全局变量、静态全局变量、全局常量。1、普通全局变量:假设我们需要在多个不同的编译单元(比如两个.cc文件)中使用全局变量进行传值,如我们有如下三个源码文件:main.cc:运行入口,有一个main函数,其中会打印出全局变量var的值;#include "def.h" #in转载 2015-09-29 14:34:32 · 561 阅读 · 0 评论 -
C中16进制转换成10进制函数
第一种情况:16进制中不含字母(a,b,c,d,e,f) long HexToDec(int nSource){ long nResult=0; int k=16; // 16进制 int n=1; // 位权 while(nSource) { nResult+=(nSource%10)*n; nS原创 2015-11-03 16:44:14 · 5899 阅读 · 1 评论 -
C++项目中的extern "C" {}
引言在用C++的项目源码中,经常会不可避免的会看到下面的代码:123456789#ifdef __cplusplusextern "C" {#endif /*...*/ #ifdef __cplusplus}转载 2015-10-07 14:19:07 · 409 阅读 · 0 评论 -
王桂林讲C++之友元
王桂林老师C++之友元友元,英语为friend,朋友的意思,朋友就是关系亲密的两个人,能够分享物品的两个人。 由此可见,友元在C++之中的作用,就是实现数据的方便访问。 本文将从下面三个方面来阐述friend的功能:在什么情况下,使用友元能够带来方便?友元可以修饰哪几种类型?友元注意事项?在什么情况下,使用友元能够带来方便?先举一个生活中的例子。A和B是借贷关系,每次A找B贷款,都需要得原创 2016-12-15 12:53:58 · 1095 阅读 · 0 评论 -
王桂林讲C++之static
王桂林讲C++之staticstatic在C语言中就已经存在,主要有以下几个用法:定义为全局静态变量 不会被其他文件所访问,修改其他文件中可以使用相同名字的变量,不会发生冲突定义为局部静态变量 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。 变量在内存中的位置变为静态存储区初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他原创 2016-12-19 11:39:22 · 1493 阅读 · 0 评论 -
王桂林讲C++之指向类成员指针
王桂林讲C++之指向类成员指针对于普通变量或普通函数,我们可以使用一个指针指向它,然后很方便的通过指针调用它。例如,//变量指针string str = "china";string *ps = &str;cout<< *ps <<endl; //运行结果:china//函数指针void func(int a) { cout<< "func(int a) = " << a原创 2016-12-20 10:37:58 · 438 阅读 · 0 评论 -
DLL基本应用
DLL基本应用编写DLL模块调用DLL模块编写DLL模块DLL有三种类型:Non-MFC DLL、Regular DLL、Extension DLL。本文主要以Non-MFC DLL为主。在VS2010中创建一个DLL工程,选择Win32控制台选项中的DLL选项。为了方便,我们选择非空项目,这样VS2010会为我们创建好基本框架,包含DLL模块的入口点DllMain函数。一般Dll模块中,有三原创 2017-09-10 22:33:17 · 860 阅读 · 0 评论 -
C++中sprintf和string的使用问题
C++中sprintf和string的使用问题关于string在sprintf中格式化的问题,用一段代码来说明问题:string str1 = "string1";string str2 = "string2";string str3 = "string3";char ch[32];memset(ch, '\0', sizeof ch);sprintf(ch, "str1 = %s, st原创 2017-09-11 21:10:34 · 11026 阅读 · 1 评论 -
线程传值风险
线程传值风险对于一个线程,通常可以给它传入一个LPVOID类型的参数。大致看来,这种行为与给一个函数传参没有多少差别。可能正是这种表象,使我们疏于防范,从而造成一些不易发觉的风险。下面用一些例子来说明。...struct thread_data{ int a; int b;};void thread_func(LPVOID lpVoid);void test_func(){原创 2017-11-23 15:08:38 · 299 阅读 · 0 评论 -
多个源代码,如何使用公共全局变量
extern方法假设我们有一个头文件commondef.h和commondef.cpp文件,第一步, 在commondef.h中声明全局变量: extern int a;第二步,在commondef.cpp中定义该全局变量: int a=10;这样,我们就能在多个.cpp文件中使用变量a;说明:a. extern声明,必须要满足两个条件:一是声明必须使用extern关键字;二是不能给变量赋初值原创 2015-09-29 14:16:24 · 388 阅读 · 0 评论