![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
c语言
零一2035
为自己加油!!
展开
-
c语言中对文件修改后放入同一文件中
#include"stdio.h"#include"stdlib.h"#include"string.h"#include"fcntl.h"#define X 7#define Y 128#define FILE_OPEN_FAILED -1#define SUCESS 1int CopyData_From_Txt(char* from_file,int原创 2016-11-15 17:33:15 · 554 阅读 · 0 评论 -
输出打印%d 和%u ,细节决定成败
int用%d和%u输出在查阅资料后发现,C中%d与%u的区别是程序如何去解释这一变量的数据所以,%d在解释过程中第一位数据代表了符号,%u第一位数据代表了数据值在输出一下数据时就有:int a = -1;printf("%d\n%u",a);12-1429496729512因为-1的补码为11111111 11111111 11111111 11111111%d解释过程:1.第一位是1,所以为负值。2.由补码再求补码,得到以下补码10000000...原创 2021-12-13 10:49:13 · 6659 阅读 · 0 评论 -
linux 下定时器,一段程序运行的时间差
#include #include #include int main(int argc,char**argv){ struct timeval timestart,timestop,timeelap; gettimeofday(×tart,NULL); sleep(1)原创 2017-11-06 18:01:12 · 335 阅读 · 0 评论 -
结构体里面定义一个字符数组,长度为0
最近看tty驱动源码,发现了一个以前老板上课时讲过的一个c语言技巧,不是很理解,上网学习了一下,总结如下:在linux源码里struct tty_buffer {struct tty_buffer *next;char *char_buf_ptr;unsigned char *flag_buf_ptr;int used;int size;int commit;int read;/* Data points here */unsigned lo...转载 2021-11-08 11:05:35 · 1123 阅读 · 0 评论 -
9.函数介绍
数组也可以作为形式参数使用数组作为形式参数使用时真正的形式参数不是数组,而是 一个单一的变量。这个变量可以当作数组使用。和数组形式参数对应实际参数可以是数组名称声明数组形式参数的时候不需要写存储区个数通常为数组形参提供另外一个形式参数用来表示数组中 存储区的个数数组形参中所包含的存储区在两个函数之间共用,任何 一个函数对这些存储区的修改可以被另外一转载 2015-07-14 14:38:04 · 270 阅读 · 0 评论 -
stm32cubemx 配置定时器。关于定时器一开启立刻产生中断问题?
原文链接地址:https://mp.weixin.qq.com/s?__biz=MzU5NDc1OTk0OA==&mid=2247483784&idx=1&sn=a9bb4c774410ba77699ef298e575ab16&chksm=fe7d19ebc90a90fda2d8d14f6da353ec12780a6d97d8bf65848b39dfd7933e...原创 2019-05-14 15:33:41 · 1564 阅读 · 0 评论 -
指针的声明
面试题:1.定义一个整形数------------------------------>int a;2.定义一个指向整形数的指针------------------------------------->int *a;3.定义一个指向指针的的指针------------------------------------------------->int **a;4.定义一个有10转载 2016-04-09 20:14:50 · 359 阅读 · 0 评论 -
gcc 编译动态库及链接
1.testa.c[cpp] view plain copy #include void Test_a() { printf("This is Test_a!"); } 2. testb.c[cpp] view plain copy #include void Test_b() { printf转载 2017-02-04 13:19:32 · 4073 阅读 · 0 评论 -
关于结构体的定义和声明的几种方式
结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共计有三种形式,分别介绍如下:1) 先定义结构体类型,再定义结构体类型变量:struct stu / *定义学生结构体类型* /{ char name[20]; / * 学生姓名* / char sex; / * 性别* /转载 2017-02-15 10:30:57 · 4759 阅读 · 0 评论 -
Linux C编程常用API及案例
http://wenku.baidu.com/view/8ed91ad9856a561253d36f2a.html?re=view&pn=51原创 2016-11-09 13:12:16 · 1147 阅读 · 0 评论 -
结构体简介
/* 结构体演示 */#include #include /*struct phone {char manu[20];char model[20];float price;};typedef struct phone phone;*/typedef struct /*phone*/ {char manu[20];char model[20转载 2015-07-29 15:39:06 · 318 阅读 · 0 评论 -
4.c语言的进制转换
十进制转换二进制的第二种方法除以2取余数倒着写101 **** ***1 50 0*** ***0 25 00** ***1 12 000* ***0 6 0000 ***0 3转载 2015-07-14 14:23:57 · 602 阅读 · 0 评论 -
二级指针的应用
因为传了指针q的地址(二级指针**p)到函数,所以二级指针拷贝(拷贝的是p,一级指针中拷贝的是q所以才有问题),(拷贝了指针但是指针内容也就是指针所指向的地址是不变的)所以它还是指向一级指针q(*p = q)。B是一个指针变量,其中存放着C的地址,但是B也要占空间的啊,所以B也有地址,B的起始地址是0x00000004,但是B内存中存放的是C的地址,所以B里面的内容就是0x00000008。//A存的是B的地址,B的地址是0x00000004。//B解引用,也就是B指针指向的C的值。...转载 2022-08-31 09:27:59 · 254 阅读 · 0 评论 -
git 常用指令
项目提交命令: ...原创 2019-05-31 09:09:44 · 186 阅读 · 0 评论 -
获取系统时间函数
#include #include #include #include int main(int argc,char**argv){ time_t T; T=time(NULL); printf("%s",ctime(&T)); return 0;}输出结果:Mon Sep 25 13:原创 2017-09-25 13:39:38 · 557 阅读 · 0 评论 -
从电脑上输入一段字符串
/* 字符串演示 */#include #include int main() {char str[10] = {};printf("请输入一个字符串:");//scanf("%s", str);fgets(str, 10, stdin);printf("字符串是%s\n", str);if (strlen(str) == 9 && str[8]原创 2016-04-14 09:44:20 · 624 阅读 · 0 评论 -
git submodule 添加子仓库
项目经常会遇到父目录下有一个子目录,并且父目录和子目录相互之间都有一个独立的git管理代码。这个时候如果想当然的将主目录提交到远程仓库是会弹出一个警告信息。大概的意思就是提示你要添加子模块的git 到远程仓库,否则这部分代码是不会同步上去的。接下来就是如何添加一个子模块到远程仓库了1.git init //初始化一个git 本地仓库2.git submodule...原创 2019-12-05 16:41:05 · 4604 阅读 · 1 评论 -
* JLink Info: STM32 (connect): Can not attach to CPU. Trying connect under reset.
由于STM32的引脚功能较多,在为了方便硬件的使用,常会使用复用,重映射的功能,这里主要提及的是SWD和JTAG端口的引脚对应出现的问题。为了使得TIM2能够重映射到PA15和PB3,所以得对TIM2进行重映射,但是这样是不够的,因为下载调试端口SWD默认就占用了该引脚,所以重映射无效,因此必须先启动时钟void Relay_GPIO_Config(void){ ...转载 2019-11-07 11:52:44 · 27058 阅读 · 7 评论 -
const关键字的作用
我只要一听到被面试者说:"const意味着常数"(不是常数,可以是变量,只是你不能修改它),我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"只读"就可转载 2017-08-31 13:11:11 · 1424 阅读 · 0 评论 -
字符十六进制转十进制
#include"stdio.h"int strhex_to_int( char *str, int start_pos, int len ){ int i, int_data=0; str += start_pos; for( i=0; i int data;转载 2016-04-26 19:56:19 · 318 阅读 · 0 评论 -
关于memcpy拷贝结构体、结构体数组到字符数组(字符串)的问题
memcpy可以将结构体拷贝到字符数组中,但直接从字符数组中是不能取出想要的结果的。因为结构体中数据类型和字符类型是不一致的,如果真要取出数据内容,有两种方法:1.再次使用memcpy进行解析 2.强制类型转换.例如:1struct aaa {int a;int b;}aa,bb;char buffer[20];aa.a=20;aa.转载 2018-01-02 16:59:10 · 12296 阅读 · 0 评论 -
typedef常用用法
用法一:typedef int size; 此声明定义了一个 int 的同义字,名字为 size。注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size:用法二:typedef 还可以掩饰符合类型,如指针和数组。typedef char Line[81];Lin转载 2016-05-16 16:47:38 · 234 阅读 · 0 评论 -
Linux下文件编程简介
对文件操作有两种方式: A、系统调用方式,这个是基于具体的操作系统 B、调用C库函数方式下面具体讲解这两种方式,以及用到的相关的函数;A:系统调用(系统函数Linux为例)综合实例,用系统函数编程实现文件的拷贝:[cpp] view plain copy #include #include #include #include转载 2016-11-09 11:02:02 · 224 阅读 · 0 评论 -
linux下fopen基本函数
#include #include #include #define LEN 100int main(int argc,char** argv){ FILE* fp =fopen("./test.txt","r+"); char *ptr=NULL; if(fp==NULL){原创 2017-05-22 20:54:12 · 5918 阅读 · 0 评论 -
2.linux系统下的c简介
在命令中采用输出重定向可以把命令的执行结果保存 在文件里采用>可以实现输出重定向使用这种方法实现输出重定向只能记录最后一个命令的 结果,文件中以前的内容都没有了也可以采用>>实现输出重定向,这种方法会保留文件 中原有内容利用通配符可以编写代表多个已经存在文件(目录)的 路径?是一个通配符,它可以代表单个任意字符*也是一个通配符转载 2015-07-14 13:13:12 · 353 阅读 · 0 评论 -
Linux下系统时间函数--->gettimeofday
1.时间精确到微妙#include #include #include int main(int argc,char**argv){struct tm *lt;struct timeval *tv;gettimeofday(tv,NULL);lt=localtime(&(tv->tv_sec));printf("Beijing Time:%04原创 2017-05-23 20:58:42 · 445 阅读 · 0 评论 -
Linux获取系统时间函数 ---->localtime
1.获取系统时间,精确到秒#include #include int main(int argc,char**argv){time_t t;struct tm *lt;time(&t);lt=localtime(&t);printf("Beijing Time:%02d-%02d-%04d %02d:%02d:%02d\n",lt->tm_mon原创 2017-05-23 18:02:25 · 2509 阅读 · 0 评论 -
strcpy
#include"stdio.h"void strpy(char *des,char const* str){ char *ptr1=des; char const *ptr2=str; while((*ptr1++=*ptr2++)!='\0'); *ptr1=0;}void main(){原创 2016-04-12 15:30:01 · 294 阅读 · 0 评论 -
STM32进入睡眠模式下的GPIO配置参考
1. GPIO内部电路图1.根据设备原理图查看IO外部引脚连接电路,闲置状态为低电平时,设置为下拉输入;闲置状态为高电平时,设置为上拉输入;闲置状态为悬空时设置为模拟输入;输出引脚根据功能需要设置就行原因:当IO通过外围电路电阻接地被拉低时,如果设置为上拉输入,则在芯片内部的上拉电阻和外围的下拉电阻构成回路,电流损耗取决于这两个电阻;当IO通过外围电路电阻接电源被拉高时,则在芯片内部...转载 2019-04-04 17:34:04 · 7090 阅读 · 0 评论 -
数组作为函数形参,使用时候可以减少传递字符长度
#include <stdio.h>#include <string.h>#include <stdlib.h>#define len 10typedef const char (myarr)[len];void func(const char arr[len]){ char dest[len] = {0}; printf("dest :%s \r\n",dest); memcpy(dest,arr,le...原创 2021-11-18 15:06:46 · 319 阅读 · 0 评论 -
字符数组
一维字符数组1.用字符串常量进行初始化 char str[]="abcd";str是一个字符数组,它存放了一个字符串“abcd”,由于字符串是还有一个结束符“\0”。所以字符数组的长度是 5 而不是 4.2.用字符常量进行初始化char s1[8]={'C','o','m','p','u','t','e','r'}两者的区别的是字符串赋值是时候,字符数组需要存转载 2016-05-03 11:35:47 · 667 阅读 · 0 评论 -
linux下进程的创建和等待
#include #include #include void main(){pid_t pid=fork();if(pidprintf("创建进程失败\n");else if(pid==0){printf("创建子进程\n");}else{printf("this is father process\n");waitpid(pid,0,原创 2017-05-30 22:01:59 · 206 阅读 · 0 评论 -
关于返回局部变量的
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意转载 2017-08-02 16:17:18 · 243 阅读 · 0 评论 -
11.字符介绍
数组做形式参数的时候真正的形式参数是一个指针如果在函数中不会修改指针形参所捆绑的存储区则 应该在指针形参前加const关键字任何存储区的地址都可以作为实际参数和指针形参 配合使用使用指针形式参数可以让被调用函数使用其他函数的 存储区无类型指针的一个主要用途就是作为函数的形式参数 使用指针也可以作为函数的返回值使用,转载 2015-07-14 14:40:37 · 364 阅读 · 0 评论 -
解析字符串到hex格式
// str="f1aaBBCc0978fa" bits[0]=F1,bits[1]=AA……………………int ICACHE_FLASH_ATTR str_to_hex(char *str,char *bits) {int i,n = 0;for(i = 0; str[i]; i += 2) { if(str[i] >= 'A' && str[i]原创 2016-06-22 09:33:48 · 2162 阅读 · 0 评论 -
强制类型转换和地址的输出
#include int main() { int num = 10; char ch = 'a'; float fnum = 1.0f; void *p_void = NULL; p_void = # printf("p_void=%p\n", p_void);原创 2016-04-14 09:38:35 · 441 阅读 · 0 评论 -
c语言中的内联函数用法解析
一、什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗。 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数。 栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题,函数的死转载 2017-11-01 10:41:52 · 847 阅读 · 0 评论 -
关于乐鑫ESP8266 AT固件的一点感悟!!!
前言:最近项目中使用到了这款wifi模组,型号是0c-esp-wroom-02,固件一开始选择的是出厂自带的,也就是1.5版本的。一路上遇到很多无解的问题。官方可能太忙了吧。。。,最终只能通过不断的更换版本来开发项目。问题1:1.在使用AT1.5版本的固件时,发现使用指令 AT+CIPSSLCCONF 返回一个ERROR。貌似是不支持还...原创 2019-05-17 16:20:09 · 3667 阅读 · 0 评论 -
1.linux系统下的常用命令及vi 编辑教程
Linux是一个多用户操作系统系统为每个使用者指定一个名字,这个名字叫做这个 使用者的帐号系统内部通过帐号区分不同的使用者典型的操作Linux系统的方式是通过终端终端里不可以使用鼠标,只能使用键盘终端里采用命令操作计算机whoami命令可以用来察看现在使用的帐号clear命令可以清除终端窗口里的所有文字信息操作系统中负责管理转载 2015-07-14 13:11:58 · 365 阅读 · 0 评论 -
KEIL 创建静态链接库+ 调用自己创建的静态链接库
原文链接:https://blog.csdn.net/yangluoning/article/details/8971217 为什么要做成lib库?1、有些人不想将自己写的源代码公开,但是同时库文件又需要让别人能够正常调用,那封装成lib的格式就是一个好方法。2、编译某些工程文件时非常耗时,像UCGUI和ST官方的库时,由于文件众多,编译一次可能得1两分钟,这时可以打包成库,这...原创 2019-02-13 17:12:48 · 1970 阅读 · 0 评论