C/C++
文章平均质量分 71
C/C++
离水的鱼儿
御剑江湖老,亦逞赤子心。
展开
-
关于C函数返回指针
你真的理解C语言函数返回类型是指针的情况吗?2021-01-05 14:41:15char *test1(){ char b[10]="abc"; return b;}char *test2(){ static char b[10]="abc"; return b;}char *test3(){ char b[10]="abc"; char *pb=b; return pb;}char *test4(){ char *b="abc"; return b;}才原创 2021-01-05 14:54:39 · 3106 阅读 · 2 评论 -
C/C++ 获取环境变量的值
函数名: getenv功 能: 从环境中取字符串,获取环境变量的值头文件: stdlib.h用 法: char *getenv(char *envvar);getenv()用来取得参数envvar环境变量的内容。参数envvar为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为envvar=value。getenv函数的返回值存储在一个全局二维数组里,当你再次使用getenv函数时不用担心会覆盖上次的调用结果。返回值: 执行成功则返回指向该内容的指针,找不到符合的环境变量名原创 2020-12-04 16:45:26 · 6916 阅读 · 0 评论 -
C/C++ 去掉宏定义__FILE__路径
一.问题在日志模块中往往带着文件信息,有的源文件是加载其他路径下的源文件,但是不想让别人看到文件路径信息,只显示源文件的名字和行数即可。如下图所示,有烦人的相对路径。二.解决方案自定义一个宏去掉路径信息,只保留文件名字。#if (_WIN32||WIN64)#define MYFILE(x) strrchr(x,'\\')?strrchr(x,'\\')+1:x#else#define MYFILE(x) strrchr(x,'/')?strrchr(x,'/')+1:x#endifp原创 2020-10-28 11:13:34 · 3693 阅读 · 1 评论 -
libxm2使用未定义的引用gzdopen lzma_code lzma_properties_decode lzma_end
./lib/libxml2.a(xzlib.o):在函数‘xz_decomp’中:/home/shenxuebing/桌面/xml/libxml2-2.9.9/xzlib.c:581:对‘lzma_code’未定义的引用./lib/libxml2.a(xzlib.o):在函数‘is_format_lzma’中:/home/shenxuebing/桌面/xml/libxml2-2.9.9/xzlib.c:312:对‘lzma_properties_decode’未定义的引用./lib/libxml2.原创 2020-06-20 10:25:28 · 1654 阅读 · 2 评论 -
纯C用栈实现倒序输出字符串
无聊看到CSDN有人问用C言语用栈实现倒序输出字符串。示例中用空格作为字符串的分隔符。#include <stdio.h>#include <stdlib.h>#define ERR_VALUE -1 //参数错误#define ERR_MEMORY -2//内存错误#define OK 0#define TRUE 1#define FALSE 0#define STRLEN 88typedef struct _MyStack{ char原创 2020-06-09 14:47:19 · 2423 阅读 · 0 评论 -
值得推荐的C/C++框架和库
值得学习的C语言开源项目Libeventlibev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。下载链接:https://github.com/libevent/li...转载 2020-03-20 14:14:35 · 909 阅读 · 0 评论 -
C/C++如何避免使用goto
1.描述一般我们在写C/C++程序的时候秒不了处理错误、异常情况,而我一般都使用goto语句,但是偏偏有的人就不喜欢goto语句,当然goto语句也有弊端,那么如何避免使用goto语句呢?直接上代码,比如你有一个函数:int read(){ int ret=0; char *buf=NULL; char *szp=NULL; //比如还要大量的需要最后操作(释放等)变量 buf=...原创 2020-03-17 21:39:14 · 1665 阅读 · 0 评论 -
Linux生成静态库和动态库和导出指定函数及使用方法
一、Linux生成动态库两步生成动态库1.gcc -fPIC -c test.c 2.gcc -shared -o libtest.so test.o 一步生成动态库gcc -shared -fPCI -o libtest.so test.c二、Linux生成静态库1. 生成目标文件 gcc -c test.c2.生成静态库 ar -r libtest.a...原创 2020-03-15 21:32:28 · 4935 阅读 · 0 评论 -
C++ ref和引用(&)
1.简介:std::ref只是尝试模拟引用传递,并不能真正变成引用,在非模板情况下,std::ref根本没法实现引用传递,只有模板自动推导类型时,ref能用包装类型reference_wrapper来代替原本会被识别的值类型,而reference_wrapper能隐式转换为被引用的值的引用类型。bindstd::ref主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝...原创 2019-12-27 13:03:13 · 7291 阅读 · 1 评论 -
C++ thread detach的大坑
示例代码:void testDetachThread(const string &str,int num){ for (int i=0;i<5;i++) { cout <<i<<" "<<"id:"<<this_thread::get_id()<<" "<< str << endl; ...原创 2019-12-27 11:15:32 · 5372 阅读 · 6 评论 -
C++:虚函数、重写覆盖、动态绑定(关键字virtual、override、final)
一、虚函数概念:在函数前面加virtual,就是虚函数虚函数的一些概念:只有成员函数才可定义为虚函数,友元/全局/static/构造函数都不可以 虚函数需要在函数名前加上关键字virtual 成员函数如果不是虚函数,其解析过程发生在编译时而非运行时 派生类可以不覆盖(重写)它继承的虚函数...转载 2019-12-25 10:59:38 · 6247 阅读 · 1 评论 -
cctype常用函数
cctype包含了许多常用函数。c++中应该是#include <cctype>c中应该是#include <ctype.h>以下为字符函数库中常用的函数:函数名称返回值isalnum()如果参数是字母数字,即字母或数字,该函数返回trueisalpha()如果参数是字母,该函数返回真isblank()如果参数是空格或水平制表...原创 2019-12-19 09:30:52 · 718 阅读 · 0 评论 -
cJSON的使用
JSON串肯定是最常用的,作为一个开发人员,如果不会用JSON,那有点说不过去了。C/C++我使用的cJSON库,这个比较小,而且就一个cJSON.h和一个cJSON.c,用起来非常方便。本人已经用了两年了,自打工作以来一直在使用。下载地址:https://sourceforge.net/projects/cjson/1.接口说明 cJSON API说明...原创 2019-12-18 16:18:37 · 2114 阅读 · 0 评论 -
小工具(字符集转换、编码转换、摘要、对称加解密)
刚闲下来两天,做个工具吧,一直都想把之前的完善掉,后来想想之前做的确实有点烂,毕竟工作又这么久了,自己攒的代码也是比较多了,有一些经常要用,索性做了一个可视化的工具,方便他人使用。不好看,只是实用的工具,本来想优化下按钮和界面,毕竟是个工具,实用就好啦~!!!支持Windows XP以上任意系统下载地址:https://download.csdn.net/download/xuebing19...原创 2019-12-17 15:17:15 · 1142 阅读 · 7 评论 -
C/C++获取变量名字及变量类型
获取变量名字用宏定义,前一个输出结果作为第二个的输入 #define VNAME(value) (#value)获取变量类型#include <typeinfo> 或者#include <typeinfo.h>typeid(value).name()示例#include "stdafx.h"#include <stdio.h>#includ...原创 2019-12-10 14:29:13 · 3673 阅读 · 1 评论 -
windows connect、接收发送超时 setsocketopt
目的1:socket 连接超时设置(connect)通过select来管理socket进行超时设置WSAStartup(MAKEWORD(2, 2), &data); sock=socket(AF_INET,SOCK_STREAM,0); //初始化套接字 ip类型-> AF_INET:IPV4 AF_INET6:IPV6 memset(&server_a...原创 2019-11-25 20:42:01 · 1732 阅读 · 0 评论 -
setsocketopt总结
功能描述:获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:#include#includeint...转载 2019-11-24 22:29:10 · 2690 阅读 · 0 评论 -
openssl静态库使用出错undefined reference to `COMP_CTX_new‘
有个项目又要用到openssl,在Linux下编译的时候没注意,报了以下错误libcrypto.a(threads_pthread.o): In function `fork_once_func':threads_pthread.c:(.text+0x76): undefined reference to `pthread_atfork'libssl.a(ssl3_record.o): In...原创 2019-10-13 16:34:39 · 16537 阅读 · 5 评论 -
解决undefined reference to `pthread_atfork'
有个项目要在CentOS6上边编译,之前的代码再CentOS7上编译都没有问题,反而在centOS6上用openssl时出了问题在用openssl的时候一直都是加,在编译的命令上已经加了-lpthread还是不管用,于是上网查了一下解决方案:加上-pthreadpthread_atfork是POSIX标准,在编译时要加上-pthread-lpthread是老版本的gcc编译器用的,在新版本...原创 2019-10-13 16:26:35 · 10141 阅读 · 1 评论 -
隐藏exe、Win32控制台程序运行
方法1:在头文件下加上一句预处理命令:#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置入口地址完整程序为:#include<windows.h>#pragma comment( linker, "/subsystem:\"windows\" /entry:\...原创 2019-07-19 11:31:05 · 4106 阅读 · 2 评论 -
VS常用预处理器设置
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.提示已经很明确了,只要添加 _CRT_SEC...原创 2019-01-01 22:18:49 · 13262 阅读 · 5 评论 -
C++ STL入门
C++ STL快速入门 在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表、队列等,第一次接触C++ STL后发现这些数据结构都已经给我提供好了,我直接拿去调用就好了,真是超级方便。最近的项目中也遇到了ST...转载 2018-02-28 17:23:20 · 202 阅读 · 0 评论 -
修改IE设置(修改注册表)允许活动内容在"我的电脑"的文件运行
最近有个项目用IE打开页面总是弹一个“Internet Explorer已限制此网页运行脚本或ActiveX控件”,因为在我的网页中加了JS文件,所以会有这个提示,为了不让用户手工设置IE,所以只能通过程序来修改IE配置。看了几个文章,确定的是要勾选IE高级设置中的“允许活动内容在"我的电脑"的文件运行”,如下图所示。勾选上这个就不会弹上边提示框了。我看了百度的资料有点少,有两个注册表的...原创 2019-06-03 14:47:50 · 4139 阅读 · 2 评论 -
Windows下VC编译器和Linux下做的SM3摘要值不一样
最近向Linux移植自己的Windows服务,HTTPS中的服务端秘钥是我经过SM4加密的,此加密是在VC2010做的,但是同样的代码移植到Linux 64位下死活解密不了了,解出来就是一堆乱码。开始排查错误,第一种情况先看解密时的数据是不是完整的,用16进制字符串打出来发现没有问题。那就是解密的秘钥不对,我的解密秘钥是一段数据经过运算形成的加解密秘钥。void makeSecretKey(un...原创 2019-06-06 09:11:00 · 1989 阅读 · 0 评论 -
CreateThread正常创建线程后线程不运行
int main(){ HANDLE hThread=CreateThread(NULL,0,fun,NULL,0,NULL); if(hThread==NULL) { printf("err\n"); }}上述代码在main函数中创建一个子线程,线程创建是没有问题的,但是线程却没有运行。解决方案:线程创建后添加如下代码WaitForSingleObject(hThrea...原创 2019-03-27 10:22:24 · 5090 阅读 · 4 评论 -
VS2012编译LibIconv库及示例Demo
Libiconv库可以实现文字格式转换,VLC在DVB的SI信息中,字符(如SDT节目名字、提供商,和EIT等)解析显示用到这个库1.1. 下载 iconv 库并解压,目前最新版本为 1.15 http://ftp.gnu.org/pub/gnu/libiconv/ 2. VC2012新建win32静态库工程,libIconv。复制iconv库lib文件夹所有文件到工程文件夹下 3....原创 2018-07-11 23:49:48 · 2271 阅读 · 3 评论 -
OpenSSL C++简单应用
我遇到过以下问题: 1.加密后得内容中带有结束符,cout输出不能正常输出 2.将加密后的内容存到文件,解密的时候再读出来,可能会碰到结束符而提前终止读取文件,导致解密失败 3.将加密后的内容转为十六进制,解密再转回来是完全可以的,但是我将加密后的内容转为二进制会有问题,我看解密的时候具体数据都是一样的,却解密失败。这个我也未解决。// OpenSSLDemo.cpp : 定义控制台应用...原创 2018-05-02 14:39:57 · 5684 阅读 · 0 评论 -
C++ 定位new内存泄漏
// debug.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <assert.h>#include <iostream>#ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)#else#defi...原创 2018-03-21 16:37:51 · 468 阅读 · 0 评论 -
BFS和DFS算法原理(通俗易懂版)
DFS 算法思想:一直往深处走,直到找到解或者走不下去为止BFS算法DFS:使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。BFS:使用队列保存未被检测的结点。结点按照宽度优先的次序被访问和进出队列。框架:BFS:#include<cstdio&g...转载 2018-03-06 16:08:03 · 844 阅读 · 0 评论 -
BASE64编码C/C++实现
//base64.h#ifndef base64_h#define base64_h#include <stdio.h>#if _cplusplusextern "C"{#endif void enBASE64code( char *charBuf, int charBufLen, char *base64Char,int &base64CharLen); /原创 2018-02-28 09:33:33 · 2161 阅读 · 0 评论 -
__stdcall、__cdcel和__fastcall三者的区别
__stdcall、__cdecl和__fastcall是三种函数调用协议,函数调用协议会影响函数参数的入栈方式、栈内数据的清除方式、编译器函数名的修饰规则等。调用协议常用场合__stdcall:Windows API默认的函数调用协议。__cdecl:C/C++默认的函数调用协议。__fastcall:适用于对性能要求较高的场合。函数参...转载 2018-02-12 16:09:02 · 130 阅读 · 0 评论 -
C++ 将中文转为UTF8 code(URL码)
最近在做项目的时候这个编码真是搞的我头大~~~!数据格式转来转去的,其中有一项是做签名,发现数据部分符号和中文必须转换成URL码。下面是中文转URL码代码!// URL编码.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #includeusing namespace std; string U原创 2018-01-19 14:24:27 · 8357 阅读 · 2 评论 -
比较全面的C/C++框架和库
- 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/~cz210552/webbench.ht转载 2018-02-01 16:29:07 · 432 阅读 · 0 评论 -
C 字符串模二加加解密
其实加密算法有很多种,前边我讲到过BASE 64、32、16、BCD,说到底都是要跟机器码进行打交道,即二进制码,无论用什么样的加密算法,都要将数据变成二进制数据后再处理,转来转去再转回来,这个模二加算法其实很简单。大体的过程是这样的:字符—->二进制—->十进制—–>异或(加密)—->二进制—->十进制—->字符我直接上代码吧!#include "stdafx.h"#include "stri原创 2017-12-22 10:59:29 · 1405 阅读 · 0 评论 -
小工具———字符编码转换查看(MFC)
最近这一年多的工作当中,有很多工作都涉及到了编码问题,每次都要去网上查很麻烦,所以,现在自己写了一个工具,方便查看各种各样的字符编码。 是用VS2012写的,用了MFC。 直接上图吧 说明: **1.**URL编码 对空格处理成“+”号,还有一种是处理成%20,而不同的标准对空格处理也不同,详情请看我的另一篇文章 关于URL编码 对空格的处理问题:https://blog.csdn....原创 2018-07-11 23:36:17 · 2838 阅读 · 6 评论 -
比较两个日期相差的天数
最近在写项目的时候用到了日期相差的天数。想了想没啥可用的接口,就自己手工写了一个。 直接上代码:myTime.h#include &amp;quot;stdafx.h&amp;quot;#include &amp;amp;lt;stdio.h&amp;amp;gt;struct myTime{ int year; int month; int day;};//设置日期void SetDate(原创 2018-07-31 22:21:48 · 1277 阅读 · 0 评论 -
libevent 2.1.8 编译常见错误
最近想做一个HttpServer,其实我找了很多开源库,昨天搞了一晚上的libcurl,感觉太繁重了,后来很多人都推荐用libevent,于是想搞一下。 libevent官网下载最新的libevent-2.1.8-stable.tar,地址:https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/li...原创 2018-09-04 10:33:55 · 2650 阅读 · 1 评论 -
VS2012下制作和使用静态库和动态库
引言什么是库:库是写好的现有的,成熟的,可以复用的代码。所谓静态、动态是指链接。将一个程序编译成可执行程序的步骤:静态库在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。为什么还需要动态库?空间浪费是静态库的一个问题。另一个问题是静态库对程序的更新、部署带来麻烦。如果静态库liba.lib更新了,所以使用它的应用程序都需...原创 2019-02-21 19:50:00 · 1745 阅读 · 0 评论 -
MFC ListControl实现复选框的全选、反选
首先在创建 ListControl的时候要加上一个属性LVS_EX_CHECKBOXESListView_SetExtendedListViewStyle(m_lsCert.GetSafeHwnd(), m_List.GetExStyle() | LVS_EX_CHECKBOXES); 这样 ListControl每一行数据的前边都会有一个复选框。//点击全选void CCertDlg:...原创 2019-02-01 13:36:45 · 7941 阅读 · 1 评论 -
MFC ListControl自动适应宽度
void *****Dlg::AutoAdjustColumnWidth(CListCtrl *pListCtrl){ pListCtrl-&amp;gt;SetRedraw(FALSE); CHeaderCtrl *pHeader = pListCtrl-&amp;gt;GetHeaderCtrl(); int nColumnCount = pHeader-&amp;gt;GetItemCou...原创 2019-02-01 13:28:22 · 4932 阅读 · 2 评论