C语言
wuyuzun
知识无边,总结是岸!!!
展开
-
新手使用strstr容易犯的一个错误
前言标准C库函数可能有一些和strstr一样的特性,本博文不一一列出,在用到的时候再归纳过来。特性: C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’(这就是新手容易犯错的地方)。...原创 2020-09-24 21:23:25 · 1204 阅读 · 0 评论 -
解释包含memcpy函数的应用程序内存占用持续增加(4K)的情况
看帖子问题帖:https://bbs.csdn.net/topics/390705325解决贴:https://bbs.csdn.net/topics/390705494结论:原创 2020-08-24 16:17:31 · 599 阅读 · 0 评论 -
define宏定义中的#,##,@#及\符号
一、#名称:字符串化操作符其作:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。使用条件:只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前举例:#define example1(instr) #instrstring str=example1(abc); 将会展成:string str=“abc”;注意:对空格的处理a、忽略传入参数名前面和后面的空格。如:...转载 2019-12-21 16:41:22 · 382 阅读 · 0 评论 -
C语言结构体
前言本博文基于VC++6.0开发调试运行;本博文知识对结构体的一个简介;什么是结构体一般的变量定义都是独立的,变量与变量之间或许有联系,比如记录一个人的个人信息(身高,体重,年龄等)时需要定义分别几个变量,并且调用时需要分别调用;但是这种对于个人信息的统计方式,并不适合大型程序的编写,如果能有一个东西,把这些信息都包裹在一个块儿内,谁用调取,那么想必会很方便;结构体的功能就是做这个工作...原创 2018-09-25 22:19:31 · 273 阅读 · 0 评论 -
关于编译和一些C语言基础概念
知识的内容来自于谭浩强的《C语言程序设计》,按自己的理解翻译了下,不时候初学者,仅仅是自己的一些胡乱的总结和回顾:一些概念程序:一组机器可以识别并且可以执行的指令; 机器指令(machine instruction):计算机能够直接识别和执行的二进制代码; 机器语言(machine language):机器指令的集合就是机器语言;计算机只能识别固定长度的二进制(0和1)代码;早期的计算原创 2018-01-14 17:21:35 · 531 阅读 · 0 评论 -
C语言链表
前言本博文代码基于VC++6.0开发;本博文只是对链表的一个简单介绍;什么是链表字面理解就是像链子一样的表格,表示表格环环相扣,而表格是用来存储数据的,所以链表就是一种动态进行存储分配的数据结构;(功能/优点方面)在学数组二维数组的时候都知道,二维数组的第二下标位代表全部一维数组中长度最大的一个;这里就出现一个问题,数组长度上的参差不齐导致内存的浪费;然而,链表更好可以解决这个问题,对...原创 2018-09-27 23:11:57 · 1747 阅读 · 1 评论 -
C51单片机 定时器模拟单路输出PWM
前言本博文基于STC89C52RC和Keil5 C51环境开发;如有不足之处还请多多指教;需要的东西定时器0;管脚P1.0;代码如下:#include <STC89C5xRC.H>#define ENABLE 1#define DISENABLE 0typedef unsigned char uchar8;sbit P1_0 = P1^0;bit...原创 2019-01-20 00:32:48 · 1111 阅读 · 0 评论 -
SD卡存储容量的计算过程(附带修正STM32官方库里SD卡例程的一个BUG)
前言SD卡底层驱动代码量不小,功能稍微有点复杂,其他的功能不说了;本博文只介绍SD卡V1.0和V2.0版本的SD卡的容量结算;在对SD卡进行FATFS文件系统(最新R0.13c版本)移植时,接口函数DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void *buff )会获取SD卡的三个重要信息作为f_fdisk和f_mkfs函数为整个SD卡分区和挂载文件系...原创 2019-05-27 21:16:02 · 8648 阅读 · 3 评论 -
C语言字节对齐
不重复造轮子,我先保存下来大神的https://blog.csdn.net/21aspnet/article/details/6729724转载 2019-06-03 12:17:06 · 107 阅读 · 0 评论 -
错误:error: #268:declaration may not appear after executable statement in block
前言:本博客基于STM32标准库和MDK环境,在不同环境,情况可能不同;翻译:声明可能不会出现在可执行语句之后的块中;解释:(我理解为)报错处所声明的内容(变量或者其他)之前有可执行语句;解决办法:将声明定义的变量或其他放在函数开头;举例:报错:改正:...原创 2019-07-14 15:33:07 · 20288 阅读 · 6 评论 -
错误:error: #70: incomplete type is not allowed
前言博文基于STM32标准库和MDK环境下编写;我只列举两种出现这个错误的类型,其他类型碰见再说;翻译:错误的不完整类型;类型一:在b.c文件中需要引入一个a.c中的结构体变量,,我在b.c中直接extern 这个结构体,,结果编译时报错error: #70: incomplete type is not allowed最后上网查找才知道结构体不能这样引入。解决办法:1.在a.h中...转载 2019-07-14 20:59:16 · 8470 阅读 · 3 评论 -
ILI93xx屏幕坐标系及扫描方式配置(LCD学习笔记1)
前言博文基于STM32F103ZET6,MDK和3.5.0标准库开发如有不足之处,多指教屏幕坐标系(呵呵,我自己给取的名字)R50h~R53h:水平垂直RAM地址位置;用来设定整个屏幕上的显示区域;R50h(HSA[7:0]):水平起始地址寄存器;R51h(HEA[7:0]):水平结束地址寄存器;R52h(VSA[7:0]):垂直起始地址寄存器;R53h(VEA[7:0]):...原创 2019-07-15 20:28:10 · 3827 阅读 · 0 评论 -
实际已经定义却出现 error: #20: identifier "xxx" is undefined 的错误
前言本博文基于MDK5.26的C环境编写,不过跟芯片没关系,是软件调试出现的问题;本博文并一定适合其他原因引起的未定义错误,仅适合“已经定义了xxx,但却报没定义的错”这种情况;如有不足之处,还请多多指教;迷之错误:error: #20: identifier “xxx” is undefined实际上我是定义了xxx的;但是编译器却一直报错;故事是这样的:我定义了a.h,b....原创 2019-07-30 18:32:14 · 81457 阅读 · 14 评论 -
MDK环境下 汇编与C语言混合编程下出现的无法加断点的问题及解决
前言博文基于MDK5.26环境如有不足多多指教;出现的问题在.c 文件中嵌入汇编的,在调试时会出现汇编代码可以打断点但是C代码不行,如下两个图来自同.c文件,具体造成的原因我也没搜到;为了不影响调试的解决办法方法一: 将所有的汇编部分转移到单独的汇编文件,汇编函数名包含在.h文件中供其他文件调用方法二: 将汇编部分转移到不需要调试的文件中,并把函数在载体.c的头文件中声明供...原创 2019-08-06 16:56:26 · 579 阅读 · 0 评论 -
C语言的枚举
前言本博文基于VC++开发调试;本博文只是对于枚举的一个介绍;什么是枚举试想一下,当一个值只会在几个有限的范围值内波动时,是否可以将这几个值包裹起来,来避免往后的程序中使用这个值的时候需要从新赋值的情况,比如每周的7天,从周一到周日,每周只会有这7天,这个值很确定;如果我们不进行“包裹”这些值,在后续的程序中,如果我们要输出周一,那么每次都要向“星期”这个变量赋值,然后再打印输出,很麻...原创 2018-10-01 11:06:31 · 659 阅读 · 0 评论 -
C语言scanf函数以及缓存详解
前言自学到C语言scanf(),printf(),getchar(),gets();的时候,我觉得这个几个函数并没有什么特别的难得,但是后来写程序的时候却出现了一些小错误总是解决不了;上网查了查,是对于C语言缓存的不理解,所以今天本篇博文就集中炮火,用我自己的理解,对这块知识进行一个剖析;(本博文中有一些知识点我个人认为还是不成熟,我也没找到能让我信服的知识,如有大神指点迷津,欢迎在评论区留言...原创 2018-08-21 00:18:27 · 9758 阅读 · 3 评论 -
C语言中的字符型数组
前言本篇博客的代码是在VC6.0++中实现;一看博客标题好像是在说字符数组的,实际上在C语言中,字符型数组包括字符数组和字符串数组;数组知识并不是很难的知识,但是一些细节问题需要注意,繁琐的概念问题不在过于强调,只强调一些易错易忽视的一些问题;字符型数组包括字符数组和字符串数组字符数组 概念:显然是由一些字符组成的数组;例如; 定义一个字符数组:一维数组:char 函数名[...原创 2018-08-27 00:01:31 · 13521 阅读 · 3 评论 -
C语言字符串头文件string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函数
前言本博文内容基于VC6.0++, 2.本博文主要介绍包含在string.h中的几个字符串相关的函数;strlen(字符串数组名)字符串有效长度函数; 功能:用来测量一个字符串的有效长度(所谓有效,就是从字符串中的第一个字符开始,一直到第一个空字符’\0’为止(不包括这个空字符)所占的字节数); 举例:#include <stdio.h>#include &原创 2018-08-29 00:16:59 · 27738 阅读 · 2 评论 -
C语言中字符型变量最高位问题和ASCII解释以及拓展EASCII(ISO/8859-1)
前言本博文基于VC6.0++编译环境编写;先搞懂几个概念字节:计算机中数据存储的基本单位;一个字节是8个比特位;字符:各种文字和符号的统称;比如一个英文字母是一个字符,一个汉字是一个字符,一个标点符号也是一个字符;字符集:就是某个范围内字符的集合,不同的字符集规定了字符的个数,比如 ASCII 字符集总共有128个字符,包含了英文字母、阿拉伯数字、标点符号和控制符。而 GB2...转载 2018-08-25 12:06:27 · 2110 阅读 · 0 评论 -
C语言指针变量的自增自减分析(指针的算数运算)
前言本博文中的代码基于VC++6.0开发调试;只是对与指针这一节知识中指针变量的总结;指针变量和加减分析首先先明白几个基础点: 1. 指针变量是没有乘除运算的; 2. 指针变量是地址,指针变量的加减是地址的加减,举例说明: 假设:整型指针变量p指向整型数组a的首元素;(p = a) 分析: 1) p++; //p自加,使自己指向先一个元素a[1]2)...原创 2018-09-08 16:19:29 · 16048 阅读 · 6 评论 -
C语言递归函数
前言本博文的代码基于VC++6.0开发调试;递归函数是C语言的一大特点,也是C语言的一个重要知识点;递归函数往往遵循着公式(例如等比数列,等差数列等);最重要了解递归的这么一个思想;什么是递归函数从功能上来看:递归函数是一个函数,C语言中,每个函数都代表一个独立的功能;递归函数当然也是一个功能函数; 从形式上来看:一种函数被自己本身调用的函数; 注意:递归虽说是函数本...原创 2018-09-03 14:14:21 · 4229 阅读 · 0 评论 -
C语言中变量存储类型和生存周期
前言本博文基于VC++6.0开发,调试,运行;内容来自谭浩强的《C语言程序设计》总结;几个重要概念数据类型:浮点型,整型,字符型等都是一个数据类型;数据存储类型:数据在内存中的存储方式;(这是本博文要讨论的重点) 注意:数据类型和数据存储类型都是针对于声明或定义的函数和变量而言的;动态存储类型:变量或函数,在被使用时临时分配内存单元,在函数结束后所占用的内存单元将会被释放...原创 2018-09-06 22:05:30 · 7801 阅读 · 1 评论 -
C语言全局变量和局部变量
前言本博文的代码是基于VC++6.0编写;讨论全局和局部变量时,其实就是对变量的作用域进行讨论;局部变量是什么?首先是一个变量,其次,这个变量只是在程序的局部范围内有效; 局部变量定义在那些位置: 1. 函数的开头; 2. 函数内的复合语句内定义; 3. 形式参数; 4. 函数中间(非开头);#include <stdio.h>void m...原创 2018-09-03 22:45:43 · 14661 阅读 · 1 评论 -
C语言的字符指针变量和字符串数组的区别
前言本博文的代码基于VC++6.0开发调试;本博文概念比较多,属于学习笔记类型;具体的区别从概念上来说:原创 2018-09-15 18:57:42 · 9583 阅读 · 2 评论 -
C语言函数指针
前言本博文代码基于VC++开发调试知识对函数指针的一个地址;什么是函数指针显然函数指针是一个指针,而且是一个指向函数的指针;C语言中,定义一个函数后,编译时编译器会为这个函数开辟一段内存空间,函数指针这个内存空间的起始地址(入口地址)成为这个函数的指针; 定义:类型名 (*指针变量名)(函数参数列表) 如int (*name) (int a,int b) //函数...原创 2018-09-15 23:12:07 · 383 阅读 · 0 评论 -
C语言的指针数组,多重指针以及main函数的参数
前言1.本博文基于VC++6.0开发调试运行; 2. 本博文只是对多重指针和指针数组的一个小总结;指针数组是什么?是一个数组,是一个元素都是用来存储地址的数组; 定义方式:类型名 *数组名[数组长度] 特点:以往的数组中,一个数组名只能确定一段内存空间,对这段固定内存内的变量的读写修改操作,但是数组指针在一个数组内可以指向若干字符串,这样,可以根据需要用一个指针数组名调用不同字...原创 2018-09-18 18:11:28 · 905 阅读 · 0 评论 -
C语言的内存动态分配函数malloc,calloc,free,realloc
前言本博文基于VC++6.0开发调试只是对这四个函数的一个总结;什么是内存的动态分配C语言中的全局变量和局部变量分别分配内存的栈中的静态存储区和动态存储区,关于静态存储区和静态存储区之前的博客也有介绍,...原创 2018-09-24 16:30:22 · 3179 阅读 · 3 评论 -
C语言中int *p[n]和int (*p)[n]的区别
前言本博文基于VC++6.0开发调试运行;int *p[n] 分析:分析这个问题要先从字符优先级开始,在字符优先级表中,[]的优先级大于*,所以,int *p[n] 就等价于int *(p[n]),这样就清晰多了,再进化一下就是 (int *)(p[n]) ,这样就完整了,显然,*(int )(p[n]) 就是一个数组,是一个数据类型整型字符型(int * ),以n个整型地址为元素,数...原创 2018-09-19 23:14:40 · 21731 阅读 · 6 评论 -
C语言中typedef的作用以及与#define的区别
转载自:https://blog.csdn.net/libing403/article/details/73402411 在原文的基础上进行了一些小的改动,我觉得更完善了一些;(1)typedef是什么typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。(2)与#define的4个不同点:(1)typedef并没有创建任何新类型,它只是为某个已存在的...转载 2018-08-05 23:54:37 · 708 阅读 · 0 评论