
C/C++
文章平均质量分 75
絔离
纵有疾风起,人生不言弃
展开
-
浅谈C++函数中的局部变量导致的指针失效问题
介绍误用局部变量对指针赋值的影响以及解决方法。原创 2024-09-14 23:30:32 · 413 阅读 · 0 评论 -
玩转C++单元测试之快速上手gtest
文章目录1.gtest简介2.gtest原理3.gtest安装3.1使用dnf进行安装3.2编译gtest项目源码4.gtest内置测试相关的宏5.gtest断言6.自定义测试失败信息输出7.gtest demo7.1简单用法7.2作为测试类使用7.2.1定义一个要被测试的类7.2.2定义测试类7.3执行所有测试用例8.gtest测试类的私有成员8.1加宏编译8.2 FRIEND_TEST8.3使用pimpl重构被测代码9.gtest-demo git链接1.gtest简介gtest是一个跨平台的(Li原创 2022-04-23 18:29:14 · 8507 阅读 · 2 评论 -
优雅回收多个成员变量内存——使用函数模板实现内存安全释放
使用函数模板解决析构函数中重复执行的代码。原创 2024-08-27 21:34:19 · 343 阅读 · 0 评论 -
JNA实践之Java模拟C结构体、结构体指针、结构体数组
第一次写JNA相关的文章是在21年了,中间由于一些事情把后续搁置了,现在补上Java模拟结构体、结构体指针以及结构体中嵌套结构体数组。如果对JNA还不了解,可以先阅读一文。原创 2024-08-24 16:57:19 · 2040 阅读 · 0 评论 -
Linux下使用宏定义判断系统架构和系统类型
在linux下使用如下命令通常,在构建时使用 #ifdef xxx最为方便:对于 32 位 ARM平台,使用arm对于 64 位 ARM平台,使用aarch64对于 32 位 x86平台,使用i386对于 64 位 x86平台,使用x86_64请注意:32 位 X86 称为 __i386__,而不是__x86__# if(defined __arm__) ||(defined __aarch64__) // arm平台 cout原创 2023-11-21 21:24:47 · 2378 阅读 · 0 评论 -
Qt xml解析之QXmlStreamReader
自QT4.3版本开始,QT提供了两个新类来读写XML:QXmlStreamReader 和 QXmlStreamWriter。顾名思义,QXmlStreamReader用于读取XML,QXmlStreamWriter用于写入XML。这两个类都使用流的方式操作xml,比起使用DOM和SAX解析xml,这是最快最方便的操作xml的方法。原创 2023-08-28 22:26:48 · 3194 阅读 · 0 评论 -
浅谈正则表达式——C++正则替换引起的性能下降
不用不知道,正则虽然处理文本很强,但用错了地方,可能带来负面效果,coding就是从这个坑出来,掉进另一个坑里,这其中的乐趣,大概就是爬上坑的过程吧哈哈。原创 2022-12-01 23:13:21 · 1900 阅读 · 1 评论 -
剖析STL map运算符重载[]——已经删除的元素是从哪里多出来的?
C++的STL很强大,需要注意的细节也有很多,就像这次不了解map的[]运算符会重新生成一个元素,导致走了很多冤枉路。特别在此记录,分享给更多的人,少踩坑!原创 2022-09-17 12:22:50 · 619 阅读 · 0 评论 -
解决error: invalid operands of types ‘const char [6]‘ and ‘const char [6]‘ to binary ‘operator+‘
在使用C++中的字符串时,习惯性的把两个使用""括起来的字符串使用+连接,结果报错意思是对两个const char*类型的操作数进行+运算是非法的,本来想着两个字符串能够像c++中的string一样进行连接,结果与自己想的大相径庭。原创 2022-09-10 01:20:30 · 20746 阅读 · 0 评论 -
sstream redeclared with public access compiler error
文章目录场景剖析解决方法场景在gtest测试中,由于要测试非public成员,于是重新定义了“private”关键字,如下#define private public结果编译时遇到下面的问题:剖析这种宏定义的方式,改变了private的作用范围,会导致其他头文件中的private被重定义。具体可参考stackoverflow上的解释(sstream-redeclared-with-public-access-compiler-error)解决方法1.使用#undef在包含系统头文件之前的原创 2022-05-22 17:18:13 · 388 阅读 · 0 评论 -
C/C++时间字符串和时间戳的相互转化
用到的函数主要有strftime、strptime 、localtime 、mktime。名词解释:时间戳:是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。时间字符串:形如2021-12-01 12:00:00size_t strftime(char *s,size_t maxsize,char *format,const struct tm *timeptr)作用:strftime将一个tm结构格式化为一个字符串参数原创 2021-12-29 21:23:46 · 22482 阅读 · 6 评论 -
C语言printf格式化输出汇总
之前用格式化输出时,只记住了常用的几个。其实printf的格式化输出有很多,这里分享给大家:printf函数头文件#include <stdio.h>函数原型int printf( const char *format, ... );你可能只用过%d,%f,不同的"%-codes"表示不同的变量类型, 也可以限制变量的长度.常用%格式short %hd:输出短整数 (h表示短整数)unsigned short %hulong %ldunsigned原创 2021-12-25 17:14:16 · 2276 阅读 · 0 评论 -
C&C++字符串比较避坑之Comparison with string literal results in unspecified behaviour
例子在比较两个字符串的时候,很多情况下你可能首先就想到了==运算符,看下面一个例子:if ("connection" == nextElement->Name()){ //比较节点名是否等于"connection",此处"connection"被当做char*处理,而Name()返回的是const char*....}使用GCC编译代码时遇到以下警告:warning: comparison with string literal results in unspecified behavi原创 2021-07-14 21:58:41 · 14379 阅读 · 0 评论 -
JNA基础之Java映射char*、int*、float*、double*
而使用ByReference对象获取的值则是0(Java中int的默认值),除非你明确知道C函数不管返回何值都对指针的值做了处理,可以使用Pointer,否则请使用ByReference引用对象,避免获取到垃圾值。建议使用对应的ByReference对象替代Pointer,使用Pointer有时可能会得到一个垃圾值(正常情况下两种方式结果一样),如果C中函数执行失败时没有对指针的值进行处理,使用Pointer就会得到一个垃圾值。这里主要分享一些比较复杂的类型之间的映射关系。官方给出的映射关系如下。...原创 2021-01-17 21:21:06 · 7233 阅读 · 10 评论 -
使用结构体tm计算两个日期的时间差
目录写在前面应用演示源码写在前面 前段时间用到了C++中的时间和日期,当时就想着,学以致用,写个计算时间差的功能。时间仓促,可能代码中还有一些不足的地方,欢迎大家批评指正~应用sscanftmmktime演示源码TimeDiff.cpp#include <iostream>#include <time.h>#include <string.h>#include <stdio.h>#include <iostream&g原创 2020-05-24 15:20:02 · 2873 阅读 · 0 评论 -
Linux下编译thread通过,运行时报错‘std::system_error‘ std::thread: Operation not permitted原因及解决办法
介绍Linux下编译thread通过,运行时报错'std::system_error' std::thread: Operation not permitted的原因及解决办法。原创 2020-01-03 19:30:51 · 6986 阅读 · 9 评论 -
C++类型转换之char转string
目录1.遇到的问题2.意外的惊喜3.结语1.遇到的问题最近项目在做去Qt化,没办法,Qt确实好用,但是要安装qt库,为了和各个现场的环境一致,只能用原汁原味的C了。QT拼接字符串:QString qstrDevPoint = QString("{TYPE:%1CONTENT:%2,COMPRESS,").arg(COM_FUNC_MSG_8).arg(g_pFeAcess->m_fa...原创 2019-12-22 15:56:10 · 805 阅读 · 0 评论 -
C++容器之vector&map应用——解析配置文件(二)
前言这篇博文给大家分享如何使用map存储key-value形式的文件内容。需求引入项目中经常用到key-value形式的配置文件,以前用java直接使用properties文件很方便,但在C/C++中,还是需要读取文件获取内容,就去尝试了一下具体如何实现。这里的配置文件内容如下:#comment row key1=name #注释password= 12345 key2 ...原创 2019-11-30 16:06:22 · 678 阅读 · 0 评论 -
linux下TCP socket编程入门案例(二)——非阻塞的TCP server&client
在[上一篇【阻塞的TCP server&client】](https://blog.youkuaiyun.com/xb_2015/article/details/102993083)中,介绍了如何使用socket函数编写第一个socket通信小程序。这篇文章在第一个demo的基础上,将使用select函数实现非阻塞的TCP server&client。原创 2019-11-23 12:36:02 · 5836 阅读 · 4 评论 -
C++容器之vector&map应用——解析配置文件(一)
本篇主要介绍如何使用map和vector解析以逗号分隔的配置文件,属于map和vector的初级应用。原创 2019-11-22 23:53:19 · 922 阅读 · 0 评论 -
细说C++常用容器之vector
目录vector简介vector常用操作1.vector的初始化2.遍历vector的方法3.vector的常用方法4.vector其他用法5.vector相关的几个重要算法6.附完整源代码```vector.cpp```---主程序```printVector.cpp```---遍历vector```vector_algorithm.cpp```---vector相关算法```getcwd.cp...原创 2019-11-16 12:42:03 · 543 阅读 · 0 评论 -
linux下TCP socket编程入门案例(一)——阻塞的TCP server&client
在项目上做的通信方面的内容,但是呢,又没这方面的经验,从头学起,分享给需要这方面内容的朋友们。TCP和UDP通信使用socket编程有两种通信协议可以选择,一种是数据报通信,另一种是流通信。(1)数据报通信数据报通信协议,就是我们常说的UDP(User Data Protocol 用户数据报协议)。UDP是一种无连接的协议,这意味着我们每次发送数据报时,需要同时发送本机的soc...原创 2019-11-10 12:30:10 · 1190 阅读 · 0 评论 -
浅谈使用C库函数之gets和fgets遇到的坑——字符串长度多出来的1是哪来的
最近在做一个小功能的时候,意外发现程序怎么都执行不到目标处,附部分问题代码,使用fgets输入字符串后,在对比字符串时,怎么都进不去if,我就纳闷了,明明输入的是quit,就是对比失败。于是乎我专门花时间去找了一下资料,发现了fgets神坑的地方。出现这个问题的原因是,从标准输入获取数据时,fgets()会比gets()多读取一个换行符"\n",下面的代码演示了这种差异以及解决方法:...原创 2019-11-06 22:16:12 · 2033 阅读 · 0 评论