C/C++
文章平均质量分 57
zmrlinux
密码学 小仙女 欢迎私聊一起学习
展开
-
考试、考研、考博 复试上机 C/C++刷题技巧与常识
刷题技巧与常识C++1.输入输出 (1)按行读取 方法一:读取一行内容。getline(cin,str) 方法二:循环读取一行内容,直到EOF失败。while(getline(cin,str)) (2)矩阵存储 方法一:vector< vector<int> > M(n,vector<int>(m,0)) ...原创 2021-04-12 23:01:39 · 905 阅读 · 3 评论 -
c++学习笔记之拷贝
拷贝初始化拷贝初始化发生的条件与情景:@使用“=”定义变量的时候@将一个对象作为实参传递给一个非引用类型的行参@从一个返回类型为非引用类型的函数返回一个对象@从花括号列表初始化一个数组中的元素或一个聚合类中的成员。拷贝初始化的限制如果我们使用的初始化值要求通过一个explicit 的构造函数来进行类型转换。如果我们希望使用从函数返回一个值,我们不能隐式使用一个expli...原创 2016-03-10 22:23:37 · 418 阅读 · 0 评论 -
C-汇编(一)
最近还真是挺忙的,做欢神的小内核实验,读书,学汇编,今天一个朋友问了个问题, 内联函数在传指针参数的时候,有没有拷贝这个指针,然后我就尝试写了个代码,汇编看代码,我去!64位的贝尔实验室汇编,老实说我只会32位因特尔汇编。。。。。。。不过基本上差不多,还基本看懂了,过后我有随手写了个简单的C汇编了下,在纸画了画。居然还挺好懂的。#include<stdio.h> int m...原创 2016-07-15 18:00:56 · 470 阅读 · 0 评论 -
C/C++ 代码安全(一)
规则1:不通过链接创建通用字符串。C11标准:如果匹配通用字符名称的字符序列由符号链接生成,将产生未定义行为。#define assign(uc1,uc2,val) uc1##uc2 = val void func(){ int u0401; assign(u04,01,4); printf("u0401 = %d\n",u0401); } int main(){ func();...原创 2016-08-27 16:27:59 · 1466 阅读 · 0 评论 -
C/C++ 代码安全(二)
规则:声明的每一个对象都必须具有正确的存储期。对象的生命周期是程序执行的一部分,在此期间保证对象保留存储空间。任何形式的访问已经超出生命周期的行为都是未定义的。引用超出生命周期的对象,可能导致攻击者执行任意代码。规则:在使用前声明表示符,不要隐含类型。规则:不要声明具有冲突链接类别的表示符。规则:使用正确语法声明灵活数组成员,例如柔性数组。规则:避免在...原创 2016-08-27 17:42:55 · 701 阅读 · 0 评论 -
C/C++ 代码安全(三)
规则:确保无符号整数运算不产生回绕,如果底层整数表示无法表示无符号整数运算的结果,该值可能发生回绕。在8086处理器上整数溢出也就仅仅会发生一个标志位修改罢了。所以我们还是要注意整数溢出发生回绕现象。/*错误实例,这很有可能发生回绕*/ void func(unsigned int ui_a,unsigned int ui_b){ unsigned int usum = ui_a +...原创 2016-08-28 16:33:13 · 934 阅读 · 0 评论 -
C/C++ 代码安全(四)
规则:不要访问已经释放的内存。使用引用被free( ) 或者 realloc( ) 函数调用释放的内存指针值是未确定的。需要注意的一点是,realloc( ) 可能会释放原来的指针。规则:在不需要时释放动态分配的内存。规则:动态分配和复制包含灵活数组成员结构。为了避免未定义行为,包含灵活数组成员的结构应该始终动态分配,具有灵活数组成员的结构必须:@使用动态存储期间(...原创 2016-08-29 22:54:57 · 741 阅读 · 0 评论 -
C/C++ 代码安全(五)
规则:不要使用rand( ) 函数生成伪随机数,这个函数不保证不保证产生随机序列质量,比较好预测。使用random( ) 替换。规则:正确的设置伪随机数生成器的种子,在random() 之前调用srandom( ) ,以设置伪随机数生成器。规则:不要向asctime( ) 函数提供无效数据。规则:确保控制永远不会到达非void 函数的结束位置。结尾处无求值语句,为未...原创 2016-08-30 21:18:02 · 711 阅读 · 0 评论 -
两个很有用的进程间通信函数popen,pclose
两个很有用的进程间通信函数popen,pclose 今天起的比较晚,然后来了也不想复习,还是看书学习--写代码--写博客有意思,不敢说有多精通,至少每天都在学习新知识,不求立刻完全消化,但求每天有进步。 现在就看看这两个函数,其实都是创建一个管道到子进程,但是使用这两个函数要比昨天使用pipe() 函数简单的多。 #include FILE *popen原创 2015-07-13 10:44:31 · 902 阅读 · 0 评论 -
条件变量--讲的很基础
1.互斥量的存在问题: 互斥量是线程程序必需的工具,但它们并非万能的。例如,如果线程正在等待共享数据内某个条件出现,那会发生什么呢?它可以重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。 在每次检查之间,可以让调用线程短暂地进入睡眠,比如睡眠三秒钟,但是因此线程代码就无法最快作出响应。真正需要的是这转载 2015-07-27 09:25:57 · 444 阅读 · 0 评论 -
进程间通信IPC --pipe
进程间通信IPC --pipe 最近期末考试,也快考完了。三天预习一门离散数学,预习累了,没事干,外边的课也不上了。可谓是无聊头顶。于是就拿起《APUE》看看,正好随手翻到了,进程间通信--管道,那就来学习学习,复习之余也可以找找乐子,言归正传。 进线程之间通信的手段很多,公认的有13种,不清楚的自己百度吧,今天来谈谈最古老的之一管道通信,详细来说是无名管道通信原创 2015-07-12 20:10:03 · 429 阅读 · 0 评论 -
信号使用方法
信号基本使用方法信号: 首先计算机是一个很会营造假象的机器,它欺骗每一个进程,线程。使他们误以为自己就是唯一使用资源的进线程,但是者也造成了一个问题,进线程们都变得比较自我,想让他们互相之间通信,或者我们和他们通信就必须使用一些 “手段“ 。向他们发送信号就是一种很好的方法。 首先在LINUX下就有很多信号,当前共有64个其中32,33号信原创 2015-06-30 12:27:03 · 622 阅读 · 0 评论 -
linux进程与线程的区别
最近在看linux系统编程,看到了线程与进程这部分,有些不知所措,实在是难以看出其中的区别,特此转发有关美文一篇,加深理解:http://mp.weixin.qq.com/s?__biz=MjM5MDIzNDQ5MQ==&mid=205544379&idx=2&sn=d61335de549e0015ad9f131600d4eb22&scene=1&key=c468684b929d2be28fa转载 2015-06-04 14:44:26 · 421 阅读 · 0 评论 -
程序运行相关结构
进程在运行时的数据结构a.out及其传说gcc编译后的程序为什么叫a.out?原因:linux是在UNIX基础上开发来的,UNIX上最开始可执行程序都是汇编得来(assembleroutput)汇编程序输出。正是这个英文的缩写,所以叫a.out并且沿用至今。可执行文件的内容Linux下的可执行文件大体分为5个段,BSS段,文本段,数据段,堆,栈。原创 2015-07-25 08:28:54 · 808 阅读 · 0 评论 -
linux下线程
linux下线程线程与进程的关系:之前转载的微信文章,进程与线程的区别已经说得比较清楚了,可以查看之前转载的文章,linux进程与线程的区别。创建一个线程:#include int pthread_creat(pthread_t * thread,pthread_attr_t * attr,void *(*stat_routine)(void *),原创 2015-06-05 00:44:16 · 603 阅读 · 0 评论 -
线程异步信号
先容我吐槽一下《Linux C 编程实战》给这本跪了,错误就不说了,且当印刷问题吧,里边讲的东西太笼统。。。。。。。。。。。。。。。Unix下信号是个很强大的存在,但是可重入性是个比较棘手的问题,昨天在developerworks看的[那篇文章](http://www.ibm.com/developerworks/cn/linux/l-reent.html)给出了五个保证可重入性的经验。除了这转载 2015-07-27 10:26:13 · 503 阅读 · 0 评论 -
线程与信号,线程与锁
#include#include#includepthread_mutex_t number_mutex = PTHREAD_MUTEX_INITIALIZER;int globvar = 0 ;void *write_p(void *arg){ while(1){ pthread_mutex_lock(&number_mutex)原创 2015-07-27 19:35:37 · 752 阅读 · 1 评论 -
共享库C/C++
共享库---共享对象的集合 1.产生原因随着软件规模的越来越大,我们的函数越来越多,为了简化这些极为庞大的共享对象。所以就将这些函数根据相应的需求规划成一些集合,进行一些处理生成共享库文件,这样可以极大的减少函数的数量便于管理和升级。 2。共享库的版本更新:兼容更新。所有的更新只是在原有的共享库基础上添加一些内容,所有的接口都保持不变。不兼容跟新。改变了所有的原有接口,原创 2015-08-26 09:15:27 · 1842 阅读 · 0 评论 -
可执行文件的装载与进程
可执行文件的装载与进程1。进程虚拟地址空间每个进程运行起来以后,都将有一个自己的虚拟地址空间,其实这还是计算机制造出来的假象,让进程误以为此时只有它自己在运行,所有内存都只有他自己在使用,一般来说,C语言指针的大小的位数与虚拟空间的位数相同,32位平台下指针为32位,4字节。64位平台下的指针为8字节,但是有些特殊的CPU,并不是这样,暂且不考虑特殊的CPU。暂时以32位平台为例,这个原创 2015-07-31 11:47:33 · 1159 阅读 · 0 评论 -
readline库的安装和使用,实现shell命令自动补全
之前自己实现一个简单shell 的时候,想要实现命令行自动补全功能,于是上网查了查资料,发现多数都提到了readline( ) 库,经过仔了解后,发现其实bash 的底层实现也是调用了这个库,我的系统是 fedora 21 并没有安装这个库,且man page 中也没有相关信息,(Q:bash 调用的谁呢?)不管那末多,先无脑安转吧,边安转边看情况吧(把我害惨了。。。。。。)原创 2015-07-25 09:11:35 · 42091 阅读 · 1 评论 -
动态链接详解
动态链接 动态链接的诞生: 动态链接产生最主要的原因就是静态链接空间浪费过于巨大,更重要的是现阶段各种软件都是模块化开发,不同模块都是由不同厂商开发的,一旦一个模块发生改变,整个软件就需要重新编译(静态链接的情况下)。 动态链接主要思想: 把链接这个过程推迟到了运行时再运行,这就是动态链接(Dynamic Linking)的基本思想。 动态链接的好处:原创 2015-08-21 22:46:21 · 2422 阅读 · 0 评论 -
C++类及使用 概念及易忽略点小结
指定基本类型等价于完成三项工作: @:决定数据对象需要的内存数量 @:决定如何解释内存中的位(long 和 float 在内存中占用的位相同,但是转换方法却不同) @:决定可使用数据对象执行的操作或方法C++ 中的类:类规范有两个部分组成: 类声明:以数据成员的方式描述数据部分,以成员函数(方法)的方式描述公有接口。 类方法定义:描述如原创 2015-09-28 19:09:55 · 511 阅读 · 0 评论 -
malloc 实现二维数组
#include #include int main() { int **a = malloc(sizeof(int)*3); a[0]= malloc(sizeof(int)*2); a[1]= malloc(sizeof(int)*2); a[2]= malloc(sizeof(int)*2); a[0][0] =1;转载 2015-09-23 09:59:04 · 544 阅读 · 0 评论 -
warning:deprecated conversion from string constant to 'char *'解决方案
Linux 环境下当GCC版本比较高时,编译代码可能出现的问题问题是这样产生的,先看这个函数原型:void someFunc(char *someStr);再看这个函数调用:someFunc("I'm a string!");把这两个东西组合起来,用最新的g++编译一下就会得到标题中的警告。为什么呢?原来char *背后的含义是:给我个字符串,我要修转载 2015-03-31 21:30:25 · 398 阅读 · 0 评论 -
Linux C I/O 小结2
linuxC i/o 小节2 文件的权限控制: 文件的权限有三个管理者,文件所有者,组用户,其他用户。一般情况下,有三种基本的权限 1.r------------------------- 4读的权限 2.W------------------------ 2写的权限 3.X------原创 2015-05-26 15:11:23 · 1037 阅读 · 0 评论 -
linux C IO 小结1
linux C I/O (文件操作1) 文件主要包含两个方面的内容: 1.文件本身所包含的数据 2.文件的属性(日期,权限,访问者,所有者。。。) 其中一个非常有用的数据结构在中,这里包含了所有关于文件信息的东西 目录也是一种文件,叫目录文件。 linux下的一些目录: /bin:存放一些普通用户可以原创 2015-05-22 21:59:09 · 390 阅读 · 0 评论 -
linux进程控制
linux 进程控制 1首先,linux是一个多任务多进程的操作系统,所以必须要讨论进程的控制。进程:进程是一个动态的实体,是程序的一次执行过程,它是操作系统的资源分配的基本单位,简单来说线程和进程区别不大,一个主要的区别就是进程有自己的内存空间,并且占用系统资源。原创 2015-06-01 01:41:48 · 504 阅读 · 0 评论 -
C指针小结3
C指针小结3 现在总结指针的更高一级的用法,其中指向函数的指针在我的博文中已经单独介绍过了,将会补充介绍几点,现在介绍别的指针的用法。 首先介绍几个陷阱: int f()[]; int f[](); 这两个声明都是非法的,如果有人问这两个声明什么意思,我们应当不加思索的说出这是错误地声明,博主就曾经苦苦思考过这两个声原创 2015-04-03 10:29:25 · 692 阅读 · 0 评论 -
程序诞生的第一步--预处理
程序诞生的第一步——预处理 程序在编译前要进行预处理,这一步被为预处理阶段,主要是进行一些文本性的操作,比如宏的替换,插入一些由#include指令所包含的一些文件的内容,以及处理一些条件编译的东西。下面介绍预处理的主要部分宏及其相关知识和一些标准中的命令。 首先标准中确定的一些预定义符号: __FILE__ 进行编译的源文件名原创 2015-04-03 22:19:58 · 538 阅读 · 0 评论 -
C指针小结2
C指针小结2 在上一篇对指针的小结中只是片面的说明了指针的概况,与基本含义,其实说到指针必然要提及数组,数组与指针有着密不可分的联系。但是切记数组和指针根本是两个东西,指针不能和数组画等号。 数组: 例如 int a[10];这声明的是一个由10个整形组成的数组,其中包含10个整形元素,同时数组名的值是一个指针常量,也就是数组第一个元素的地址。如果前面声明原创 2015-04-01 20:59:11 · 535 阅读 · 0 评论 -
void 与泛型计算
Void相信很多人在初学C编程时不太理解它是什么意思,例如void main(),main (void)等等很多书上都有这个词,但是它到底是什么意思呢? void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。void几乎只有“注释”和限制程序的作用,定义一个void变量没有意义,不妨试着定义:void a;原创 2015-03-24 23:22:50 · 664 阅读 · 0 评论 -
C指针小结1
C指针小结2 我认为C语言的核心就是指针和对内存的操作,而操作内存就是由指针实现的,所以说指针真的非常非常重要,在后边的数据结构的学习中更要用指针,如果你立志要走C系统的开发这条路,那么你就应当精通指针的各种应用。下面写一点博主在学习指针时的一点小心得,小体会(仅仅一家之言)。 在刚学习指针时是真的一头雾水,感觉好难理解啊,这到底是个什么鬼?为何如此之难?不过在经过很长时间的纠原创 2015-03-31 22:28:23 · 429 阅读 · 0 评论 -
C结构体小结
结构体1.声明一个结构体 struct 自定义结构体类型名 结构体变量名 同时必须声明结构体内部的所有成员类型例如声明一个学生的成绩单 struct Student Score { char aName[128];原创 2015-03-23 20:57:44 · 558 阅读 · 0 评论 -
关于malloc类函数的小结
Malloc函数基于redhat Linux 7.0关于malloc翻译Malloc函数族函数:malloc free calloc realloc ---分配与释放内存 简介:#include#includeVoid *malloc(sizet size);Void free(void*ptr)原创 2015-03-22 22:22:52 · 585 阅读 · 0 评论 -
浅析命令行参数
浅析命令行参数 在LInux或UNIX系统下我们经常使用各种的命令例如ls ,cd,cat,cp,mv,rm等等命令尤其会在后面跟一些参数与选项来辅助我们实现各种功能,但是这些命令是如何接受这些参数的,其实这正是使用了命令行参数这个语法。平常我们写程序通常是这样:int main()但其实完整的main是这样的int main(int * argc,char ** a原创 2015-03-29 16:53:35 · 361 阅读 · 0 评论 -
字符串小结2
字符串小结21.限制字符的字符串函数strncmp()函数:将两个函数的前n个字符进行比较int my_strncmp(char const *pcStr1, char const *pcStr2,unsigned int uiLen){while(*pcStr1 == *pcStr2 && *pcStr1 != '\0' && uiLen>0){pcStr1++;原创 2015-03-28 22:43:52 · 427 阅读 · 0 评论 -
字符串小结1
字符串字符串声明:1.数组形式: char ar[100]="Hello World";2.指针形式: char *pch="Hello World";字符串的输入:1.gets()函数从键盘接受一行标准输入,不检查字符串的长度,直到遇到回车结束输入。在结束之前会给最后一位加上一个'\0',然后把这个字原创 2015-03-28 21:44:53 · 450 阅读 · 0 评论 -
GDB与coredump错误类文件的解析
GDB与coredump错误类文件的解析 GDB是Linux与UNIX系统下的一款程序调试工具,下面来介绍GDB的用法:请先看这个程序: 这是我们作为实验的一个小程序,共10行输出4 进行编译如果要用GDB调试必须要加-g参数原创 2015-04-04 23:35:29 · 746 阅读 · 0 评论 -
C语言杂记1
C语言杂记 注意signed int 与 unsigned int 之间的比较,与运算因为当int 型变量为-1时很可能被升级成无符号整型,就导致取反+1这种运算的产生,出现无法控制的很大的数。 malloc(strlen(str))绝对错误地语句,考虑字符串需要+1. NULL 与NUL的区别: NUL:用于结束一个字符原创 2015-04-22 23:16:32 · 429 阅读 · 0 评论 -
《APUE》笔记--第一章
《APUE》笔记--第一章 闲着没事就翻了翻《APUE》的第一章,随手记几个概念吧。操作系统:可以将它定义为一款软件,通常将这款软件叫内核。系统调用:内核的接口公共函数库构建在系统调用的接口之上,应用程序既可以使用公用函数库,也可以使用系统调用。shell是一个特殊的应用程序,为其他应用程序提供了一个接口。shell:原创 2015-05-18 22:53:55 · 371 阅读 · 0 评论