
C语言程序设计
夜星辰2025
全力以赴 顺势而为
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入理解C语言结构体和位域
结构体通过。原创 2024-04-19 14:30:00 · 588 阅读 · 0 评论 -
strlen 和sizeof 的区别
strlen的返回类型是size_t,它可以根据实际字符串的长度来表示较大的整数值。使用strlen函数时,需要包含头文件<string.h>。需要注意的是,sizeof是一个编译时操作符,而不是在运行时计算的函数。它可以直接应用于数据类型、变量等,而不需要引入任何特定的头文件。因此,strlen用于计算字符串的长度,sizeof用于计算数据类型或变量的字节数。它们在功能和应用上有所不同。strlen和sizeof是C和C++中用来处理字符串的两个不同的操作符。原创 2023-09-06 09:51:36 · 240 阅读 · 0 评论 -
C语言常用库函数
memcpy 内存拷贝函数void *memcpy(void *destin, void *source, unsigned n);memcpy指的是C和C++使用的内存拷贝函数,函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标destin中。参数:destin-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。source-- 指向要复制的数据源,类型强制转换为 void* 指针。n-- 要被复制的字节数。返回值原创 2021-07-24 13:44:51 · 284 阅读 · 0 评论 -
C语言数据类型 int、long int 最大值
unsigned int 0~4294967295int -2147483648~2147483647unsigned long 0~4294967295long -2147483648~2147483647long long的最大值:9223372036854775807long long的最小值:-9223372036854775808unsigned long long的最大值:1844674407370955161__int64的最大值:9223372036854775原创 2021-01-13 19:56:49 · 19343 阅读 · 0 评论 -
keil5 if else 问题解决
现象:keil 5 仿真时候,if和else执行的内容会一直触发;在Options for Target Optimization(优化) 选择level 0 或者 default原创 2020-07-17 19:44:23 · 7048 阅读 · 4 评论 -
Undefined symbol CAN_FilterInit 编译报错解决
keil 5编译报错.\output\TZ5053 V2.0: Error: L6218E: Undefined symbol CAN_FilterInit (referred from can_driver.o)..\output\TZ5053 V2.0: Error: L6218E: Undefined symbol CAN_ITConfig (referred from can_driver.o)..\output\TZ5053 V2.0: Error: L6218E: Undefined sy原创 2020-07-14 10:55:07 · 934 阅读 · 1 评论 -
Linux多线程编程之创建两个子线程,分别执行子线程函数(注意编译方式)
#include <stdio.h>#include <pthread.h>//Linux多线程编程之创建两个子线程,分别执行子线程函数(注意编译方式)/*int pthread_join(pthread_t thread, void **retval);int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void原创 2017-12-07 20:41:21 · 8748 阅读 · 0 评论 -
linux进程间通信方式之信号处理signal
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <strings.h>#include <string.h>#include <signal.h>#include <syslog.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>原创 2017-12-07 11:17:07 · 1182 阅读 · 1 评论 -
用共享内存读写数据
31_shm_read.c#include#include#include#include #include#include#define SHM_SIZE 1024//用共享内存读写数据//读数据到共享内存/*int shmctl(int shmid, in原创 2017-12-07 11:11:51 · 8056 阅读 · 0 评论 -
linux进程间通信方式之信号处理sigaction
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <errno.h>#include <strings.h>#include <string.h>#include <signal.h>#include <syslog.h>#include <sys/types.h>#include <sys/stat.h>原创 2017-12-07 11:04:00 · 261 阅读 · 0 评论 -
linux进程间通信方式之定时器信号alarm
#include #include #include //linux进程间通信方式之定时器信号alarm//alarm()也称为闹钟函数,它可以在进程中设置一个定时器。当定时器指定的时间到时,内核就向进程发送SIGALARM信号void hand(int sig){ printf("time out\n");}int m原创 2017-12-07 10:11:49 · 884 阅读 · 1 评论 -
用进程相关API函数编程一个程序,产生一个进程扇,父进程产生一系列子进程,每个子进程打印自己的PID然后退出,父进程最后打印PID
#include<stdio.h>#include<stdlib.h>#include <unistd.h>#define N 5//用进程相关API函数编程一个程序,使之产生一个进程扇//父进程产生一系列子进程,每个子进程打印自己的PID然后退出。要求父进程最后打印PID。int main(){ pid_t ret = -1; int i; int num =原创 2017-12-05 09:23:42 · 4009 阅读 · 0 评论 -
编写守护进程(待优化)
#include<stdio.h>#include<stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>//关闭守护进程:ps -aux//sudo kill -9 (pid)//守护原创 2017-12-04 22:27:16 · 227 阅读 · 0 评论 -
子进程会继承父进程用户id,用户组id,用户信息,文件描述符,数据段,堆栈,当前工作目录,创建文件权限,信号处理方式,进程组号,会话期号。
#include <stdio.h>#include <unistd.h>#include <stdlib.h>//子进程会继承父进程用户id,用户组id,用户信息,文件描述符,数据段,//堆栈,当前工作目录,创建文件权限,信号处理方式,进程组号,会话期号。int main(void){ printf("main process pid =%d\n",getpid());原创 2017-12-04 22:25:45 · 584 阅读 · 0 评论 -
父进程产生一系列子进程,每个子进程打印自己的PID然后退出,父进程最后打印PID
#include<stdio.h>#include<stdlib.h>#include <unistd.h>//父进程产生一系列子进程,每个子进程打印自己的PID然后退出。要求父进程最后打印PID。int main(){ int num = 5; int i; pid_t pid,ret; for(i=0;i<num;i++) { p原创 2017-12-04 22:24:08 · 9433 阅读 · 1 评论 -
waitpid()使用示例
#include<stdio.h>#include<stdlib.h>#include <unistd.h>//waitpid()使用示例int main(void){ pid_t pid,ret;// printf("main process pid = %d\n",getpid()); pid = fork();//创建子进程 if(pid < 0)原创 2017-12-04 22:21:18 · 1999 阅读 · 0 评论 -
waitpid WNOHANG
#include<stdio.h>#include<stdlib.h>#include <unistd.h>//waitpid WNOHANGint main(void){ printf("main process pid = %d\n",getpid()); int status; pid_t pid; pid = fork();//创建子进程原创 2017-12-04 22:18:40 · 1255 阅读 · 0 评论 -
wait()函数,自杀函数abort(),WIFEXITED WIFSIGNALED
#include<stdio.h>#include<stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>//wait 1.阻塞等待子进程结束,当任意一个子进程结束或者该进程接收到一个信号,立即返回。//2.当前进程回收子进程的8kb物理资源,防止子进程变僵尸进程。//自杀函数abort()//WI原创 2017-12-04 22:14:26 · 816 阅读 · 0 评论 -
Linux多线程编程之设置线程属性,设置线程分离属性
#include<stdio.h>#include<pthread.h>#include<stdlib.h>//Linux多线程编程之设置线程属性,设置线程分离属性/*int pthread_join(pthread_t thread, void **retval);int pthread_create(pthread_t *thread, const pthread_attr_t *att原创 2017-12-07 21:16:39 · 980 阅读 · 0 评论 -
Linux多线程编程之线程同步操作
#include #include #include #include //Linux多线程编程之线程同步操作/*同步(synchronization)指的是多个任务(线程)按照约定的顺序相互配合完成一件事情无名信号量:基于posix标准信号量*//*-->初始化信号量值int sem_init(s原创 2017-12-07 22:08:09 · 260 阅读 · 0 评论 -
enum与typedef enum的用法
在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:#defineMON1#defineTUE 2#defineWED3#defineTHU 4#defineFRI 5#defineSAT 6#defineSUN 7在此,我们定义一种新的数据类型,原创 2018-01-09 21:43:55 · 14040 阅读 · 1 评论 -
C语言移位操作、联合体总结
(1)用|置1,例如P1_flag |= 0x01;//置1 0000 0001,把bit0置1;(2)用&amp;置0,例如P1_flag &amp;= 0xFE;//置0 1111 1110,把bit0置0;(3)把一个字节对应位数据提取出来,例如light_control[0][0] = (data &amp; 0x08)&gt;&gt;3;//把data指向的一字节数据保留bit3,右...原创 2019-02-20 10:52:35 · 1781 阅读 · 0 评论 -
STM32 C语言编程易错问题总结
(1)注意数组越界问题;有时候前面定义一个数组,在后面使用时候,对数组越界赋值或者操作;(2)错误的条件判断方式;If(0 &amp;amp;lt; data &amp;amp;lt; 100);//这是错误的写法应该改成if(0&amp;amp;lt;data &amp;amp;amp;&amp;amp;amp; data &amp;amp;lt; 100);(3)Switch语句使用:switch和ca原创 2018-11-23 13:30:04 · 1470 阅读 · 0 评论 -
对于STM32存储大量数据的优化问题
对于存储固定字节的大量数据,例如一个数据有16字节,如果数据量很大,需要找某个数据的时候,需要一个个遍历判断,很耗时间。处理方法是,把每个数据中某个特征的字节,对应到内存的地址,寻找时候直接找地址,这样快很多。或者把这个存储空间分区,判断这个特征字节在哪个区间,缩小遍历数据量。...原创 2018-09-21 18:10:28 · 6614 阅读 · 0 评论 -
递归函数求一个数的阶乘
#include<stdio.h>//递归函数求一个数的阶乘int factorial();int main(){ int r,n; printf("-----输入一个阶乘-----\n"); scanf("%d",&n); r = factorial(n); printf("%d! = %d\n",n,r);原创 2017-11-14 20:57:56 · 13690 阅读 · 3 评论 -
二进制转换成十六进制输出的C代码
(本博客只提供很厉害的方法,没有代码)项目需求是需要把一个字节(8bit)的二进制数转换成一个十六进制的数值,然后发送给上位机;我自己试着编写代码,思路是把这个8bit的二进制数存放到一个数组里面,分高4bit和低4bit,分别转换成十进制,然后用switch判断这个十进制,转换成对应十六进制数,例如十进制1对应十六进制1,十进制10对应十六进制A;问题来了,这样就把一个十六进制拆分成2个数...原创 2018-09-20 19:10:47 · 12842 阅读 · 0 评论 -
sizeof和strlen区别
(1) strlen 是函数,sizeof 是运算符。(2)strlen 测量的是字符的实际长度,只能用char*做参数,以'\0' 结尾;而sizeof 测量的是字符的分配大小,可以用类型做参数,还可以用函数做参数,如:int sum();printf("%d\n", sizeof(sum()));//输出的结果是sizeof(int),即4。(3)数组做sizeof的参数不退化,传递给...原创 2018-04-27 19:10:09 · 321 阅读 · 0 评论 -
嵌入式笔试2
一、STM32单片机和51单片机的差别? 1.单片微型计算机简称单片机,简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序存储)、输入输出设备(串口、并口等)和中断系统处于同一芯片的器件。 2.STM32单片机则是ST(意法半导体)公司使用arm公司的cortex-M3为核心生产的32bit系列的单片机,他的内部资源(寄存器和外设功能)较8051、AVR和PIC都要多的...原创 2018-04-11 23:07:33 · 1276 阅读 · 0 评论 -
嵌入式笔试
1.在int a[3][4]={0}中,数组a中每个元素均可以得到初值0; 在int a[3][4]={2}中,数组a中第一个元素为2,其余为0; 在int a[3][4]={{2}}中,数组a中第一个元素为2,其余为0; 在二维数组中,没有赋初值的,都默认为0.2.CPU主要组成部分是运算器和控制器。3.单片机程序一般存放在ROM里面。4.-3的补码是?...原创 2018-04-07 20:22:30 · 698 阅读 · 0 评论 -
计算101-200之间有多少个素数,并输出所有素数
#include <stdio.h>//计算101-200之间有多少个素数,并输出所有素数#define start 101#define end 200int main(){ int i = 0; int count = 0;//计数值 for(i=start;i<end;i++) { int j = 0; for(j=2;j原创 2018-04-02 17:26:35 · 2204 阅读 · 0 评论 -
C语言程序设计之用冒泡排序法对整型数组进行升序排序
#include <stdio.h>#define NUM 8void maopao();int main(void){ maopao(); return 0;}void maopao(void){ int a[NUM],i,j,tmp,k,flag; printf("input %d number: \n",NUM); f...原创 2018-04-02 15:33:51 · 10103 阅读 · 2 评论 -
单链表尾部插入算法
#include<stdio.h>#include<strings.h>#include<stdlib.h>//目的 从链表尾部插入新节点struct node{ int data; //有效数据 struct node *pNext; //指向下一个节点的指针};void insert_tail(struct node ...原创 2018-04-08 22:48:23 · 4729 阅读 · 0 评论 -
创建一个单链表节点
#include<stdio.h>#include<strings.h>#include<stdlib.h>//目的 将创建节点的代码封装成一个函数//构建一个链表的节点,指针是p,暂时指向NULLstruct node{ int data; //有效数据 struct node *pNext; //指向下一个节...原创 2018-04-08 22:07:41 · 7097 阅读 · 0 评论 -
wait()函数,作用:阻塞等待任意子进程,回收子进程8kb物理内存
#include<stdio.h>#include<stdlib.h>#include <unistd.h>//wait()函数//作用:阻塞等待任意子进程,回收子进程8kb物理内存int main(void){ printf("main process pid = %d\n",getpid()); pid_t pid; pid = fork();//创建子进程原创 2017-12-04 22:09:41 · 824 阅读 · 0 评论 -
exec函数族可以在进程中执行另外一个程序,字符串复制函数strncpy
#include<stdio.h>#include<stdlib.h>#include <unistd.h>#include <string.h>//exec函数族可以在进程中执行另外一个程序//字符串复制函数strncpyint main(int argc,char *argv[]){ printf("exec demo\n"); //判断 if(argc !=原创 2017-12-04 22:05:26 · 422 阅读 · 0 评论 -
内核链表list.h
#ifndef _LINUX_LIST_H#define _LINUX_LIST_H/* * Simple doubly linked list implementation. * * Some of the internal functions ("__xxx") are useful when * manipulating whole lists rather than single原创 2017-11-23 21:43:20 · 286 阅读 · 1 评论 -
dup2 复制文件描述符
#include<stdio.h>#include<unistd.h>#include<sys/stat.h>#include<fcntl.h>#include<stdlib.h>#include<string.h>//dup2 复制文件描述符//int dup(int oldfd);//int dup2(int oldfd, int newfd);int main(int argc转载 2017-11-29 20:15:12 · 339 阅读 · 0 评论 -
dup 复制文件描述符
#include<stdio.h>#include<unistd.h>//#include<sys/stat.h>//#include<fcntl.h>//#include<stdlib.h>//dup 复制文件描述符int main(int argc,char *argv[]){ int fd; char buf[10]; if(argc != 2) {转载 2017-11-29 20:12:13 · 282 阅读 · 0 评论 -
文件IO lseek
#include<stdio.h>#include<unistd.h>#include<sys/stat.h>#include<fcntl.h>#include<stdlib.h>#include<string.h>//文件IO lseek//从文件开头开始定位,把相应内容替换//从文件末尾开始定位,把相应内容替换int main(int argc,char *argv[]){转载 2017-11-29 20:05:06 · 267 阅读 · 0 评论 -
把一个文件拷贝到另外一个文件,需要打开两个文件,一个读取,一个写入
#include<stdio.h>#include<unistd.h>#include<sys/stat.h>#include<fcntl.h>#include<stdlib.h>#include<strings.h>//文件IO//把一个文件拷贝到另外一个文件,需要打开两个文件,一个读取,一个写入int main(int argc,char *argv[]){ int r转载 2017-11-29 19:58:39 · 636 阅读 · 0 评论