![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言
本专栏文章,主要C、C++相关技术知识
TechGenius
Just DO IT.
展开
-
【C++】Vector中存储派生类(多个子类继承一个基类)
(一)问题描述往vector push_back了一个派生类对象,现在如何从这个vector中取出这个派生类对象?并且可以使用派生类中的接口函数?(二)解决方案1.对象切割(Object slicing)一般来说,衍生类所占的存储空间一般都比基础类大。当用基础类强制转换派生类物件(对象)指標时就会产生对象切割(Object slicing),即:当把一个派生类对象赋给一个基原创 2022-04-11 11:30:59 · 4165 阅读 · 1 评论 -
C++ c_str()使用总结
最近在修改代码时,由于对c_str()的使用不当,尝试用一个指针常量保存字符串的c_str返回值,导致指针指向了垃圾内存,然后就出现了垃圾数据,今天就特意总结下~函数原型const char* c_str() const;返回值c_str()函数返回一个指向C字符串的指针常量,内容是字符串对象的当前内容加上一个额外的终止字符(‘\ 0’)。这是为了与c语言兼容,因为在c语言中没有string类型,所原创 2016-04-28 17:27:48 · 4051 阅读 · 0 评论 -
原码, 反码, 补码 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 摘自:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html转载 2016-05-27 14:16:56 · 535 阅读 · 0 评论 -
<string> 与<string.h>、<cstring>的区别
是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀并且去掉了.h的后缀名,所以string.h头文件成了cstring头文件。但是其实现却是相同的或是兼容以前的,这就是的来源,不要觉得又多了一个东西。相当于标准库组原创 2016-05-14 16:57:42 · 321 阅读 · 0 评论 -
C++拷贝构造函数(深拷贝,浅拷贝)
对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=88; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include <iostream>using namespace std;class CExample {private: int a;public: CExam原创 2016-05-14 17:43:57 · 588 阅读 · 1 评论 -
aemon 进程为什么要fork两次,与后台运行程序区别?
daemon进程是后台守护进程.linux 下server都是daemon进程。相信大部分开发人员都知道如何去写一个daemon进程。但是另一方面,大部分人不知道为什么要这么做,不少人是从某个地方copy一个函数。但是具体为什么这么实现,却不是很透彻。daemon函数存在的原因是因为控制终端由于某些原因(如断开终端链接)会发送一些信号的原因。而接收进城处理这些信号缺省动作会让进程退出。这些信号会由于转载 2016-07-16 17:42:11 · 647 阅读 · 0 评论 -
DLL动态链接库导出函数
以前写导出函数时,都是在*.def中声明,但是ide自动生成的导出函数却是利用__declspect(dllexport)实现,那么我们自己在添加导出函数时,则需: 1. 在需要导出的函数或类前添加__declspect(dllexport)即可。例如要导出函数void test(),则应该为:__declspect(dllexport) void test(){…} 2. 步骤1导出的函数如果原创 2016-08-11 21:51:06 · 976 阅读 · 0 评论 -
STL-容器间的复制list&vector
#include <iostream>#include <list>#include <string>#include <vector>int main(){ //copy list to list std::list<std::string> oldList; std::list<std::string> newList; oldList.push_back转载 2017-10-28 15:39:11 · 863 阅读 · 0 评论 -
【编译DLL动态库】使用VS2013编译C语言动态链接库
前言最近在使用Java开发过程中,需要使用JNI调用DLL动态链接库,但是动态库源码是使用C语言编写的,遂从网上查找资料,作已记录。编译步骤STEP - 1:新建项目文件–新建–项目–Visual C++模块–Win32–Win32项目–输入项目名称 应用程序选择DLL–完成STEP - 2:更改编译选项 项目–属性–配置属性–C/C++–预编译头–更改为创建(/Yc):项目–属性–配置属性–C原创 2017-10-16 21:01:58 · 1301 阅读 · 0 评论 -
【C++ -> 容器初始化】结构体嵌套复杂结构初始化
案例简述最近在设计数据结构时,数据之间较为复杂,数据结构如下:typedef struct tagDataInfo{ long offs; // 索引 char name[20]; // 姓名 std::list<int> ord_list; // 定单索引列表 std::map<std::string, std原创 2017-11-13 18:34:34 · 4575 阅读 · 0 评论 -
Win10 + vs2013编译ACE6.3.0(x86与x64)动态库
简单说明win10下使用VS2013编译ACE6.3.0动态库的步骤记录。步骤说明1)下载地址:http://download.dre.vanderbilt.edu/下载最新版本,选择Latest Micro Release Kit项下的ACE.zip即可。下载历史版本,选择如下:我这里下载的ace.6.3.0.2)查看Visual Studio版本:帮助 -&amp;amp;amp;gt; 关于Mic...原创 2018-09-26 20:15:37 · 1098 阅读 · 0 评论 -
std::list::back带来的坑
好吧,先说一下问题吧! 在之前测试中,程序运行正常,今天突然间就挂掉了,然后各种调试之后,才发现是list.back()导致访问越界, 更让人无语的是,gdb调试时,程序崩溃的地方却不是访问越界的地方, 没办法,只能一步步的打印日志了,最后才找到罪魁祸首!所以今天就特地学习并记录下。出错场景// 定义一个liststd::list<StructA> A_List;// 取最后一个元素Stru原创 2016-05-10 20:37:42 · 5879 阅读 · 1 评论 -
整数位操作比除法/取余快多少?
前言最近在写代码的时候,在CSDN论坛上看到一段测试代码,发现位操作求余比mod快了不是一点啊。所以借别人的代码小小总结一下。代码块用时测试代码,例如:#include <iostream>#include <string>#include <ctime>#include <sys/timeb.h>#include <boost/scoped_array.hpp>using namespa原创 2016-03-28 10:19:04 · 3986 阅读 · 0 评论 -
C语言—sscanf函数使用总结
前言最近工作中,需要写测试程序读取文件中数据,一行行的使用sscanf函数提取相应字段,今天就小小的总结下。函数原型说明int sscanf( const char *buffer, const char *format [, argument ] ... );sscanf属于scanf函数家族一员,从输入源—字符串中将参数buffer的字符串根据参数format字符串来转换并格式化数据,转换后的原创 2016-03-26 16:03:27 · 532 阅读 · 0 评论 -
C++SIGUSR1和SIGUSR2的学习
代码转载自:http://www.sharejs.com/codes/cpp/6846 http://www.cnblogs.com/chenyadong/archive/2011/10/11/2207985.html 本文仅作自己学习记录,不作它用! (一)C++父子进程使用SIGUSR1和SIGUSR2进行通信#include <stdio.h>#转载 2016-02-06 15:51:16 · 6227 阅读 · 0 评论 -
c++拼接字符串效率比较(+=、append、stringstream、sprintf)
最近写的程序用到大量拼接字符串,为了提高拼接效率,比较了一下+=、append、stringstream、sprintf四种拼接字符串的方法。测试方法比较方法是写了4个函数,分别用+=、append、stringstream、sprintf的方式来拼接字符串,拼接方法是将s1="abcedfg",s2="hijklmn",s3="opqrst"三个字符串拼接到一起,总共循环60次。然后在main函转载 2016-03-01 18:42:26 · 2348 阅读 · 0 评论 -
C++实现string存取二进制数据的方法
本文实例讲述了C++实现string存取二进制数据的方法,分享给大家供大家参考。具体方法分析如下: 一般来说,STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考。 首先提一下STL中string的参考资料:http://www.cplusplus.com/reference/string/string/ ,不懂的转载 2016-03-30 15:04:32 · 11813 阅读 · 0 评论 -
stl::string与二进制数据
C99 有很多和 string 相关的函数,如 strcat , strchr , strcmp , strcpy , strlen , strncat , strncmp , strncpy 等。然而使用 C++ 编程时,所有和 string 相关的操作均可以使用 string 类的相关接口完成, string 提供和原来 C 接口类似的功能和性能,同时提供更高的安全性。String 类有一个特性原创 2016-03-30 15:07:20 · 883 阅读 · 0 评论 -
STL容器list&vector间的复制
STL容器间复制原创 2016-02-23 10:54:55 · 735 阅读 · 1 评论 -
C++中new与malloc的10点区别
前言几个星期前去面试C++研发的实习岗位,面试官问了个问题: new与malloc有什么区别?这是个老生常谈的问题。当时我回答new从自由存储区上分配内存,malloc从堆上分配内存;new/delete会调用构造函数/析构函数对对象进行初始化与销毁;operator new/delete可以进行重载;然后强行分析了一下自由存储区与堆的区别。回来后感觉这个问题其实回答得不怎么好,因为关于new转载 2016-03-08 19:49:30 · 445 阅读 · 0 评论 -
char 与 unsigned char的本质区别
为什么字体会便呢? 在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-127~127,unsigned char没有符号位,因此能表示0~原创 2016-03-09 14:25:46 · 1795 阅读 · 0 评论 -
C,C++宏中#与##的学习记录
// #表示:对应变量字符串化// ##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符#include <stdio.h>#define trace(x, format) printf(#x " = %" #format "\n", x)#define trace2(i) trace(x##i, d)int main(){ int i=1; cha原创 2016-02-25 17:40:18 · 487 阅读 · 0 评论 -
程序运行时的内存空间分布
我们在写程序时,既有程序的逻辑代码,也有在程序中定义的变量等数据,那么当我们的程序进行时,我们的代码和数据究竟是存放在哪里的呢?下面就来总结一下。一、程序运行时的内存空间情况其实在程序运行时,由于内存的管理方式是以页为单位的,而且程序使用的地址都是虚拟地址,当程序要使用内存时,操作系统再把虚拟地址映射到真实的物理内存的地址上。所以在程序中,以虚拟地址来看,数据或代码是一转载 2016-04-05 20:09:13 · 502 阅读 · 0 评论 -
程序运行时的内存空间分布(二)堆和栈的比较
对于一个完整的程序,在内存中分布情况如下图: 堆和栈的比较表(仅针对C++): 转载地址:http://blog.chinaunix.net/uid-9718353-id-1998079.html转载 2016-04-05 20:22:32 · 1012 阅读 · 0 评论 -
C++类中的静态成员变量和静态成员函数的作用
数据成员可以分为静态变量、非静态变量两种。静态成员:静态类中的成员加入static修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以 静态成员不能访问非静态成员,因为静态成员存在于内存,所以非静态成员可以直接访问类中的静态成员。非静态成员:所以没有加static的成员都是非静态成员,转载 2016-04-05 20:46:47 · 436 阅读 · 0 评论 -
C语言getopt函数的简单使用
一、函数简介getopt函数用来分析命令行参数,参数argc和argv分别代表参数个数和内容,跟main()函数的命令行参数是一样的。参数 optstring为选项字符串, 告知 getopt()可以处理哪个选项以及哪个选项需要参数,如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果在处理期间遇到了不符合optstring指定的其他选项...原创 2015-03-24 11:26:35 · 1002 阅读 · 0 评论