- 博客(37)
- 收藏
- 关注
原创 有缓冲访问文件(库函数)
库函数主要有fopen、fclose、fread、fwrite、fprintf、fscanf等函数。fopen函数: 表头文件: #include 定义函数: FILE * fopen(const char * path,const char * mode); 函数说明: 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态,mode有下列几种
2017-01-22 00:09:07
419
原创 不带缓存的文件I/O操作
我们知道在嵌入式Linux中一切皆为文件,主要有这几种文件:-表示的普通文件;d表示的目录文件;l表示的链接文件;c表示的字符设备;b表示的块设备;p表示的管道文件,如FIFO文件;f表示的堆栈文件,如LIFO。 不带缓存的文件I/O操作主要用到6个函数creat、open、read、write、lseek和close。这里的不带缓存是指每一个函数都只调用系统中的一个函数,这些函数
2017-01-19 20:25:08
2253
转载 自己用C语言写一个简易printf
#include #include #include "stdarg.h"void PrintInt(unsigned int Num);//输出正整数void PrintString(char *str);//输出字符串void PrintInt_2(int Num);//输出整数void PrintBit(int Bit);//输出二进制
2017-01-17 18:57:11
2304
原创 用于分配空间的函数malloc、calloc、realloc
malloc、calloc函数的实现实质原理是将可以用的内存块连接成一个链表。当用户调用malloc函数时,会沿着链表找到一块满足用户要求大小的内存块。然后有一个链表一分为二的过程,用户需要的分配给用户,不需要的返回链表上。当用户使用完空间后,用free()释放,被释放的空间会重新返还到链表上。但多次操作后,空闲内存块就会很零碎,如果这个时候,用户申请一块内存块,malloc函数就会申请延时,然后
2016-12-11 19:51:02
835
转载 回调函数
为了弄明白这种函数的奥妙,首先提出三个问题:1. 回调函数是什么东西?2. 回调函数怎么开发,怎么使用?3. 回调函数的作用,应该在什么情况下使用?看了这么多的资料,一句话:回调函数就是函数指针的一种用法。[cpp] view plain copy print?#include void printWelcome
2016-12-11 19:17:29
305
原创 指针和数组
指针和数组的区别,大致有以下几点:1、从空间分配来说:数组是静态分配,指针是动态分配。2、从访问效率来说:数组是直接访问,指针是间接访问,数组效率要高一点。3、从安全性来说:数组容易造成越界,而指针会出现野指针造成的内存泄漏。相比之下数组更为安全一点。4、从函数形参来说:越界传指针用指针的指针,传两位及以上数组用的是数组指针。5、从处理对象来说:指针偏向于计算机地址的处理,而数
2016-12-11 19:08:40
901
原创 数组
数组名是指针常量,保存的是首元素的地址,不能做自加。数组最好是不要用变量动态定义的,即当你输入的字符个数不确定时,就想先定义一个变量,然后把它传给数组作他的长度。因为这是依赖于编译器支持的标准,如果是C99的话,则可以动态定义数组大小。而像C89等则不可以,所以在不确定编译器支持标准时最好是不要用变量动态定义数组大小。所以,我们要做到定义时写死数组长度。定义一下数组大小。
2016-12-06 20:51:06
444
原创 向数组中输入字符串的三种方法
像一维数组中输入一串字符并输出。第一种方法:用gets()获取字符串;输出结果:第二种方法:利用scanf输入字符(注意不能获取空格)结果:第三种方法:利用while循环getcchar()结果:
2016-12-06 19:37:33
44107
4
转载 malloc实现原理
malloc()是C语言中动态存储管理 的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值 是一个指向所分配的连续存储域的起始地址的指针。 动态内存分配 就 是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据 程序的需要即时分配,且
2016-12-03 00:41:18
736
原创 指针定义完整步骤(连上一篇野指针)
#include#define len sizeof(char)*100int main(){ char *ptr = (char*)malloc(len); -------------------------------------使用malloc函数给指针分配内存空间。 if(ptr == NULL)
2016-12-03 00:34:56
472
转载 野指针
讨论一什么是野指针? 一个母亲有两个小孩(两个指针),一个在厨房,一个在卧室,(属于不同的代码块,其生存期不同)母亲让在厨房的小孩带一块蛋糕(指针指向的对象)给在卧室的小孩,这样在卧室的孩子才肯写作业。但这个在厨房的小孩比较淘气,他在走出厨房时自己将蛋糕吃了,没能带出来。而在卧室的没有吃到蛋糕,所以不肯完成他的作业。结果母亲却不知道卧室的孩子没有吃到蛋糕,还以为作业完了。结果第二天她就被
2016-12-02 13:29:06
375
原创 野指针
野指针是指随机指向一块内存的指针。野指针造成的错误叫做”内存泄漏”。使用野指针会因内存泄漏而产生段错误。但野指针造成的程序错误不一定每次都会产生段错误,因为内存随机分配的地址可能是已经分配使用过的地址。产生内存泄漏的原因偶遇两个;1、访问了没有权限的内存。我们平时正确使用指针时,系统会将相应的内存分配给用户,但是如果指向没有分配内存,系统会判定我们没有权限。2、访问了已经释放的内存
2016-12-02 13:26:14
310
原创 了解指针
指针是什么?指针是一个变量 ,所有指针变量里保存的是地址,操作系统的地址是固定不变的,而地址的长度是由操作系统的位数决定的。我们如果使用的是32位的操作系统,一个指针占四个字节,如果是32位的操作系统,一个指针占8个字节。我们来看一下学习指针要懂的指针基本概念:int *p也可写作int* p保存字符地址步长加1,保存整型步长加4,以此类推。不同的地址不同的步长,是由保存的地
2016-12-02 12:55:35
386
转载 printf在终端输出时改变颜色
printf在终端输出时改变颜色 在调试程序时,有时候要输出大量数据,如果让printf/fprintf改变输出数据的颜色,那观察数据就方便多了。 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。转义序列是以 ESC 开头,可以用 /033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, = 用八进制表示的33)。
2016-12-02 11:15:13
562
转载 printf使用技巧
巧用可变参数宏、编译器内置宏和printf输出调试信息前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选
2016-12-02 11:12:13
347
原创 printf
%d 整型 int%d 短整型 short int%ld 长整型 long int%c 字符型 char%f 浮点型 float%lf 双精度 double%p 地址%s 字符串%u 数组格式化输出函数printf我们要知道:1、缓冲区满一行输出。2、缓冲区中有\n或\r输出注意:如果prinf后有
2016-12-02 11:09:24
307
原创 由一个语句引出的关于C的变量和常量的相关知识
先来看一个赋值语句:int num=5;如果让你解释一下这个语句你能说出多少呢?如果仅仅解释成定义了一个变量num赋值为5,未免显得太单薄了。如果将变量的占用空间内存大小,作用域以及存储区域都描述一遍,就是一个比较去全面的解释了。一个整型变量占4个字节,我们已经知道了。由于不知道这个定义的变量是全局变量还是局部变量,所以分开说为上。局部变量和全局变量的作用域是不同的,局部变量的
2016-11-29 17:13:33
366
原创 数据类型
1、bit 位 1字节=8位 1个字(32位处理器)=4个字节=32位 半字 = 2个字节 = 16bit2、字节长度跟编译器分配有关系。3、sizeof 不是函数,strlen是函数。4、int num;sizeof(num); int num;sizeof num;两种写法sizeof(int)是对的写法,siz
2016-11-29 16:11:49
337
原创 vim 文本快捷操作
vim的三种模式:命令行模式、底行模式、插入模式 三种模式的切换:初始命令行模式按I/A切换到插入模式,按ESC切换回命令行模式,按shift+:切换到底行模式,输入wq保存退出 vim +生成文件名 建立文本文件 esc的一些指令 数字yy 复制从光标开始的数字行
2016-11-22 17:36:55
298
原创 关于指针和右左法则练习
1、一个整型数 int a;2、一个指向整型数的指针:int *a;3、一个指向指针的指针,它指向的指针是一个整型数 int **a;4、一个有10个整型数的数组 :int a[10];5、一个有10个指针的数组,该指针是指向一个整型数:int *a[10];6、一个指向有10个整型数组的指针:(*a)[10];7、一个指向函数的指针,该函数有一个整型参数并返回一个整型
2016-11-22 17:32:35
544
原创 学习C语言我们要了解的一些概述
1、现有的开发语言有几种?主流是用来做什么的?(关键词) C++:主要用于服务器后台代码编写,有很大优势。现在逐渐火起来的VR技术,也可以用C++来进行研发。同时C++也可以做前端,主要是做桌面应用,基于linux主要使用QT开发,基于Windows用控制台MMC JAVA:前端或后台开发。 php :电商 C#:Windows下桌面应用程序 ne
2016-11-22 17:02:39
497
转载 C指针声明解读之左右法则
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的: The right-left rule: Start readin
2016-11-21 23:29:09
124
原创 makefile的一些补充
我们写makefile的目的,就是帮助自己去看懂别人的代码,并且帮助自己去创建大型的工程。我们仿照Linux的内核去建立一个工程,去管理它。这样是是十分方便并且高效率的。我们以建立一个能实现加减乘除的简易计算器为例,大致步骤为:1、建立一个总目录,起名为calculation。2、在calculation的目录下建立计算器要实现的加、减、乘、除四个目录,分别起名为add、sub、m
2016-11-21 00:44:21
264
转载 Linux下段错误的原因以及调试方法
简而言之,产生段错误就是 访问了错误的内存段 。一、一般来说,段错误就是指访问的内存超出了系统分配给这个程序的内存空间,通常这个值是由gdtr来保存的,1)gdtr是一个48位的寄存器,其中的32位是保 存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别。2)指向的gdt是由以64位为一 个单位的表,在这张表中就保存着程序
2016-11-20 19:50:24
4090
原创 Linux开发工具之makefile
工程管理器-make 工程管理器make简介 为什么需要工程管理器?作用是什么? 将所有项目代码文件(所有代码文件在不同目录下形成一个工程)用脚本文件实现自动编译批处理 什么是自动编译、时间戳 自动编译:通过往makefile里写逻辑,帮make命令实现对目标文件的编译 时间戳:就是文件属性里的创建、修改、访问时间。 用make
2016-11-19 09:55:11
244
原创 Linux开发工具之gdb
调试器-gdb 功能1、启动被调试程序 2、让在被调试的程序在指定位置停住 3、当程序被停住时,可以检查程序状态-变量值编译器gcc,用gdb打开文件 命令:
2016-11-14 20:18:17
199
转载 vim常用配置(这个可能更容易看懂一点)
常用配置:set number 显示行号:set nonumber 取消行号:set numberwidth=3 设置行号列宽:set hlsearch 高亮显示搜索内容:set incsearch 输入关键字的时候高亮显示:set ignorecase 搜索时忽略大小写:set wrapscan 循环搜索(默认值):set nowrapscan 只搜索一次:s
2016-11-14 19:22:45
8659
原创 Linux开发工具之gcc编译器
Linux开发工具 编译器-gcc gcc编译器的特点1、可以编译多种语言 2、是一款交叉编译器(在一个CPU平台下的编译可以在另一个CPU平台下运行,即gcc能够在当前CPU 平台上为多种不同体系结构的硬件平台开发软件)
2016-11-14 19:11:58
414
转载 GCC 编译链接命令用法
Contents 一、简介... 2 二、简单编译... 2 2.1预处理... 2 2.2编译为汇编代码(Compilation). 3 2.3汇编(Assembly). 3 2.4连接(Linking). 3 三、多个程序文件的编译... 3 四、检错... 4 五、库文件连接... 4 5.1编译成可执行文件..
2016-11-12 18:22:20
1038
原创 一些Linux上编的基础C程序(一)循环结构
1、求1000以内的完数,像6=1+2+3这样的数。2、求100以内的素数如果要统计个数最后只需把变量n用printf输出即可。
2016-11-08 00:38:03
325
转载 我的vim的vimrc配置文件,保存用 - 飞在天空的鱼 - 博客频道
转载自:飞在天空的鱼 - 博客频道http://blog.youkuaiyun.com/zhengzhoudaxue2/article/details/45247733?locationNum=15&fps=1[cpp] view plain copy" All system-wide defaults are set in $VIMRUNTIME/debi
2016-11-06 23:58:05
3082
原创 C语言的分支结构和循环结构(三)
在许多问题中需要用到循环控制。循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。1、for循环例如用程序实现一个数学表达式SUM = 1 - 3 + 5 - 7 + ...-99 + 101;首先,需要分析数学规律,由于存在符号,加大了编程难度,可依旧是有规律可寻,不难发现,设一共有n个数,当 n 为偶数时,对应的项为负号;当 n 为奇数
2016-11-05 00:36:53
1279
原创 C语言的分支结构和循环结构(二)
大致了解了分支结构的两种语句之后,我找了程序来对照着敲敲看看。 1、if语句:编写一个程序,输入某人的身高(cm)和体重(kg),按下式确定其体重是否为标准、过胖或过瘦。(1)标准体重=身高-110;(2)超过标准体重5kg(即大于5kg)为过胖;(3)低于标准体重5kg(即小于5kg)为过瘦。 我们根据数学知识可以列出表达式如下:假定某人身高为h,体重为w
2016-11-04 00:05:54
2570
原创 C语言的分支结构和循环结构(一)
控制语句共有9种:if、switch、while、do-while、for、break、continue、goto、return。 分支结构中包括的语句有if和switch。 1、if语句即“如果……否则……”。与正常讲话逻辑类似,编写程序时需弄清条件与输入输出量之间的逻辑关系。if语句中值得一提的是它的缺省形式。即if语句中else部分可以省去,如果if后的表达式的值
2016-11-02 17:07:27
1621
原创 关于C语言的数据类型需要了解的基本概念
数据类型,总结起来主要有以下几种:整型(int)、字符型(char)、浮点型(float、double)、数组(int a[10])、指针(int *p),结构体(struct)、空类型(void),这些是我常见的,还有像枚举类型(enum)、共用体类型(union)是不常见到的。 一部分数据类型进行知识点罗列:整型:1、整型常量即整常数,可以用十进制、八进制、十六进
2016-11-02 00:21:29
659
原创 对C语言的基础认识
软件都比较依赖硬件,所以程序的可读性和移植性会比较差。C语言就是一种为了提高系统软件的可读性和可移植性而出现的一种高级语言。兼具高级语言与低级语言的优点。汇编语言和高级语言的区别:汇编语言可直接对硬件(像内存地址位地址)进行操作,C语言与他的孪生兄弟UNIX的渊源在此不多做阐述目前流行的C语言编译系统大多是以C89为基础的C语言的特点简单来说分为三个部分:1、就语言本身来说:语言简
2016-10-31 16:58:04
5918
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人