陌上花开缓缓归以
无
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux size_t和ssize_t的区别
size_t和ssize_t是C语言中用于表示对象大小和系统调用的数据类型。size_t是无符号类型,用于内存分配、字符串处理等返回大小值的场景;ssize_t是有符号类型,允许返回-1表示错误,常用于系统调用。在32位系统中,它们通常为32位;64位系统中则为64位。而int在两种系统中通常保持32位。使用size_t存储系统调用的返回值可能导致错误,因为无符号类型无法正确表示-1的负值。开发时应注意数据类型的选择,避免32位与64位系统兼容性问题。原创 2025-05-26 03:03:19 · 74 阅读 · 0 评论 -
linux unsigned int 和signed int 造成的数据翻转问题定位
我们一般使用相同类型的定义,比如将上面代码里面的unsigned int b 得定义改为int b。你可以通过显式地将unsigned int转换为int,或者将int转换为unsigned int,来控制结果的类型。:根据C和C++的标准,当不同类型的数值进行运算时,会进行类型提升。对于整型来说,如果其中一个操作数是。的值较大时,相加可能会导致溢出,从而产生未定义行为。为了保持一致性并避免这种潜在的问题,结果被转换为。如果你在乎符号并且想要避免无符号整数的行为,你可以检查int的符号,并相应地处理。原创 2025-05-03 12:24:23 · 196 阅读 · 0 评论 -
浮点数面试题以及浮点数存储IEEE754
默认是double型的,当2.2赋值给a 时,存在(double)2.2 --> float a 的强制转换,当数据较小时,结果一般不会出现错误,当数据较大时,若将右值赋值给左值时产生溢出,结果就会出现非预期值,而加了f后数据就是float类型的了。这里我们可以看出0.2小数部分是无限循环的,所以这里的转换的二进制小数是无限循环小数,所以第一个不等于。0.2*2 = 0.4 ,取 0 0.4*2 = 0.8 ,取 0。0.8*2 = 1.6 ,取1。原创 2024-09-20 09:09:57 · 289 阅读 · 0 评论 -
面试题—c语言字符串复制
所以 str1的数据是me.原创 2024-09-20 09:09:17 · 402 阅读 · 0 评论 -
Linux进程间内存共享机制mmap详解
成功后,mmap()返回指向映射区域的指针。错误时,返回值MAP_FAILED(即,(void*)-1),并设置errno以指示错误原因。确定映射的更新是否对映射相同区域的其他进程可见,以及更新是否传递到基础文件。描述了映射所需的内存保护(不得与文件的打开模式冲突)。1,mmap函数参数说明。1,mmap函数读数据。2,mmap函数写数据。原创 2024-09-19 15:38:41 · 305 阅读 · 0 评论 -
linux 进程间通信之pthread(条件变量共享和互斥锁共享)
2、PTHREAD_PROCESS_SHARED, (2)这个属性可以使互斥量在多个进程中进行同步,如果互斥量在多进程的共享内存区域,那么具有这个属性的互斥量可以同步多进程.1、PTHREAD_PROCESS_PRIVATE,这个是默认值(1),同一个进程中的多个线程访问同一个同步对象.b,设置和获取条件变量共享属性。初始化和销毁mutex互斥锁。a,设置互斥量进程共享属性。b,获取互斥量进程共享属性。a,process.h头文件。a,条件变量属性初始化。原创 2024-09-19 15:38:00 · 323 阅读 · 0 评论 -
c语言实现动态数组数据的读写操作
在开发过程中,很多时候我们需要使用到不定长的数组,今天我们来用union联合体结合举例看看动态数据的简单用法。原创 2024-09-07 22:50:01 · 153 阅读 · 0 评论 -
linux信号量和共享内存实现进程锁举例说明
除了使用信号量,也可以使用互斥锁,比如初始化一个互斥锁,并设置其属性为。,这样它就可以在多个进程间共享。原创 2024-05-26 18:14:58 · 300 阅读 · 0 评论 -
信号捕捉生成gcore定位程序挂死
文件exception.txt。原创 2024-04-30 16:10:37 · 240 阅读 · 0 评论 -
全局变量定义和声明使用
【代码】全局变量定义和声明使用。原创 2023-11-10 17:12:46 · 578 阅读 · 0 评论 -
signal(SIGPIPE, SIG_IGN)
补充问题:当遇到系统异常退出时我们怎么处理呢?linux查看signal常见信号。原创 2023-09-21 19:41:49 · 621 阅读 · 0 评论 -
DEFUN宏函数学习
1,DEFUN宏函数说明#define DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, attrs, dnum) \ struct cmd_element cmdname = \ { \ .string = cmdstr, \ .func = funcname, \ .doc = helpstr, \ .attr = attrs, \ .daemon = dnum, \ };#defin原创 2021-06-05 20:00:29 · 2940 阅读 · 0 评论 -
#ifdef ,#if, #ifndef用法注意事项
平时我们写代码一直要注意这两种用法的区分,防止出现这样的错误。大家知道输出的是什么吗!再看看下面的这个你就知道了。我们在调式代码或者在设备种类多样时会用到宏定义。原创 2023-04-24 14:47:24 · 206 阅读 · 0 评论 -
字符串函数strchr的使用
1,字符串str匹配字符c后,返回匹配后的首地址。char *strchr(const char *str, int c);#include<stdio.h>#include<string.h>int main(){ char* testS = "ptp 0/1/1"; char* testP = "ptp.0/1/1.4095"; char* s1 = strchr(testS,'.'); if(s1 != NULL) { printf(".原创 2021-07-21 17:04:59 · 2183 阅读 · 0 评论 -
linux mysql c语言编程(mysql基本函数说明)
mysql常用函数总结和编程过程:所需头文件: #include &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;mysql/mysql.h&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;(1)初始化一个MYSQL结构MYSQL *mysql_init(MYSQL *mysql)(2)关闭一个服务器连接,并释放与连接相关的内存 void my原创 2019-03-13 10:31:11 · 588 阅读 · 1 评论 -
Linux JSON解析对象实例
json解析对象:a.json{ "name": "中国", "cities": [{ "省份": "江苏", "城市": ["南京", "苏州"], "邮编": 123 }, { "省份": "广东", "城市": ["深圳", "广州"], "邮编": 123 }, { "省份": "湖北", "城市": ["武汉", "宜昌"]...原创 2019-04-13 20:22:17 · 860 阅读 · 0 评论 -
linux c语言全面学习json解析函数
1,json结构的定义typedef struct cJSON { //cJSON结构体 struct cJSON*next,*prev; /* 遍历数组或对象链的前向或后向链表指针*/ struct cJSON *child; /*数组或对象的孩子节点*/ int type; ...原创 2019-04-04 17:31:21 · 1151 阅读 · 2 评论 -
Linux 动态库的编译和执行
静态库生成及测试:编码myccso脚本gcc -c -Wall -I./inc ./src/myadd.c -o myadd.oar rcs libmyadd.a myadd.orm *.omv libmyadd.a ./libgcc -Wall -g -I../inc -L../lib main.c -o main –lmyadd动态库生成及测试:编写生成动态库gc...原创 2019-05-24 00:35:09 · 616 阅读 · 1 评论 -
linux 动态库的编译和使用以及其函数说明
1,动态库函数说明:#include <dlfcn.h>void *dlopen(const char *filename, int flag); //打开动态库,第一个参数为路径char *dlerror(void);//handle为dlopen函数的返回值,第二个参数是我们封装的.so里面的函数名字void *dlsym(void *handle, const...原创 2019-05-25 00:43:11 · 469 阅读 · 0 评论 -
死锁问题如何定位
thread 命令切换到等待锁(这里主要指Mutex,暂不考虑读写锁)的某个线程。Owner 字段表示是哪个线程持有这把锁,它是线程的 LWP 号,可以通过 info thr 查看。bt 查看, frame(f)切到相应的栈(函数调用的第几层)。查看到thread 33 上面有_lll_lock_wait。2, info thread 查看在那个线程卡住。1) gdb attach 到死锁的进程.info thread 查看在那个线程卡住。1,gdb attach 到死锁的进程.原创 2023-03-14 15:43:21 · 222 阅读 · 0 评论 -
32位数据移植到16位机系统上兼容处理
1,我们在处理数据时,很多时候系统不兼容的情况,比如我们有时候需要将32位数据移植到16位机器上,直接处理会导致数据截断,我们怎么处理呢。原创 2023-02-07 15:08:48 · 435 阅读 · 0 评论 -
shell 通过makefile 传参给c语言
功能:通过shell(sh)编译将类型传给makefile,然后makefile将参数传到c.使用make clean 和 make -f Makefile clean 有什么区别!2,遇到关键字all/clean/...依赖的时候如果换行需要空格(加table键)makefile 参数说明和学习,参考另一篇文章。格式需要转换一下,什么系统下就需要换成哪一种。测试:直接自己运行test_make测试。1,空格没用table键;思考:宏是怎么传进来的!原创 2023-01-18 17:36:36 · 1646 阅读 · 0 评论 -
printf可变参数原理说明
使ap不再 指向堆栈,而是跟NULL一样.有些直接定义为((void*)0),这样编译器不 会为va_end产生代码,例如gcc在linux的x86平台就是这样定义的. 在这里大家要注意一个问题:由于参数的地址用于va_start宏,所 以参数不能声明为寄存器变量或作为函数或数组类型. 关于va_start, va_arg, va_end的描述就是这些了,我们要注意的 是不同的操作系统和硬件平台的定义有些不同,但原理却是相似的.4、取得地址后,再结合参数的类型,程序员就可以正确的处理参数了。原创 2022-11-16 18:52:06 · 548 阅读 · 0 评论 -
#define的使用
【代码】#define的使用。原创 2022-11-08 20:03:42 · 196 阅读 · 0 评论 -
文件读写操作调式记录(fread,fgets,feof)
文件 创建open.txt文件读写运行结果:原创 2022-06-12 16:16:27 · 208 阅读 · 0 评论 -
结构体偏移offset整理
#includesstdio.h>//地址偏移量#define OFFSET (type,member) ( (unsigned int) &(( type*)0)->member)typedef struct{ int id; char name[201; float score;}STU;int main(){ unsigned int size = OEFSET (STU,id) printi("gize= %d\n".size); size =.原创 2022-02-09 17:39:31 · 539 阅读 · 0 评论 -
__Packed 对其问题以及数据类型不匹配问题整理
今天用keil5编译工程时遇到下面的问题Argument of type “__packed LASER_PARAMETER_T*”is incompatible with “LASER_PARAMETER_T*”我们看 首先了解一下__Packed的用法:__packed的作用及用法。__packed 限定符将所有有效类型的对齐边界设置为 1。这就意味着:1、不会插入填充以对齐压缩对象2、使用未对齐的访问读取或写入压缩类型的对象。我们再来分析一下代码里面的结构体:更改如下.原创 2021-09-24 14:39:27 · 1430 阅读 · 0 评论 -
代码的可读性和简约性分析
我们先来看看一个代码架构:int test(){ if(test1()) { fun1_1(); if(test2()) { fun2_1(); if(test3()) { fun3_1(); if(test4()) { fun1(); } else { fun2();+ } } } } return 0;}这样原创 2021-07-31 14:43:57 · 354 阅读 · 0 评论 -
写代码之字符串注意事项
1,字符串库函数尽量用带n的;比如说用strncpy,而不要用strcpy;2,字符串拷贝宁可截断也不要越界,所以在拷贝的时候一定要对源字符串长度进行判断,从而确认是否能够拷贝到目的字符串;char* my_strcpy(char* strDest,char *strSrc){ strncpy(strDest,strSrc,strlen(strSrc)); return strDest;}在上面代码中我们可以看出虽然用了strncpy,字符串拷贝还是会越界,所以我们要遵从上原创 2021-07-16 09:07:59 · 331 阅读 · 0 评论 -
数据类型总结以及数据存储(从计算机组成原理来分析)
1,int/unsigned int2,char/unsigned char3,short/unsigned short4,long/unsigned long5,float/double6,struct(结构体)7,union(联合体)8,enum(枚举)原创 2021-07-02 14:35:39 · 399 阅读 · 0 评论 -
c语言编程常见问题解析(资源泄漏)
2 资源泄漏2.1 内存泄漏2.1.1 示例问题描述通过 malloc 等函数动态申请的内存在使用后必须相应地调用 free 等函数释放,否 则这块内存就不能被再次使用,出现内存泄漏,示例如下:示例一:`在这里插入代码片` int leak_example(int c) { void *p = malloc(10); if(c) { ...原创 2019-03-28 23:35:21 · 1112 阅读 · 0 评论 -
一个数据类型出的错
(1)代码如下:int port_convert_mac(unsigned char ucPortValue, unsigned int* puiMac){ if(puiMac == NULL) { printf("file = %s, function = %s, line = %d pucMac = nullptr\n", __FILE__, __FUNCTION__, __LINE__); return VOS_ERR; } switch(ucPortValue) {原创 2021-07-01 11:37:45 · 141 阅读 · 0 评论 -
argc和argv的使用总结
1,我们在写main程序时如果想带参数调试的话,那么我们应该怎么用呢于是系统给我们定义了一个函数 int main(int argc int* argv[])第一个参数就是我们终端输入的参数个数(从执行程序开始(即从./a.out开始))./a.out以及后面的参数又传入到哪里呢,后面的参数由指针数组* argv[]来接收,argv【0】里面就是放的我们的可执行文件的映射命令./a.out,后面的argv[1],argv[2] .....argv[n] 依次放的就是./a.out后面的参数;现.原创 2021-07-01 11:05:13 · 4451 阅读 · 2 评论 -
shell命令行的调用(system和popen的使用方法总结)
所以我们在测试的时候用gdb挂载的时候需要注意,我暂时没有找到gdb怎么样可以规避这种打印,但是这对我们的显示没有较多影响,因为我们在正式版本时不会使用gdb版本。popen返回值很简单,要么非NULL,要么NULL。但是要注意,popen返回成功只代表管道创建成功,不能说明命令执行成功,pclose返回值就跟system除开-1,1后,其他的和system一样。原创 2021-06-22 11:13:17 · 1021 阅读 · 0 评论 -
c语言常用字符串函数总结
字符串函数_360百科 https://baike.so.com/doc/1004697-1062174.html1,memcpy和strcpy/strncpy的区别2,atoi()3,itoa()4,strstr()5,strchr()6,strok_r7,strcat8,原创 2021-06-11 09:56:34 · 142 阅读 · 0 评论 -
c语言泛型指针void *作为入参的用法
1,在函数的参数类型不确认的时候,我们是怎么做呢,是分情况处理吗,我觉得我们可以用void * 泛型指针来处理:(1)整形数据:int get_port_value(void* pValue){ int test_num = 10; if( NULL == pValue) { return -1; } (int)(*pValue) = test_num; return 0;}int main(){ int test原创 2021-06-09 16:46:16 · 2602 阅读 · 0 评论 -
c语言数据类型问题的总结
1,我们来看看下面这两个例子,你知道输出的是什么吗!int test_fun(unsigned int num){ for(unsigned int i = 0; i < num -1; i++) { printf("fun = %s,line = %d\n",__FUNCTION__,__LINE__); } return 0;}int main(){ test_fun(0); return 0;}int test_function(int num原创 2021-05-23 14:01:11 · 216 阅读 · 0 评论 -
c语言for循环代码优化测试以及分析
1,我们在写代码的时候很多时候会用到for循环,那么循环重数比较多的时候,我们该怎么部署循环的循序呢,我们先来看看下面这个例子吧!原创 2021-05-23 12:25:14 · 641 阅读 · 0 评论 -
c语言volatile 的用法总结
1,我们在开发过程中经常看看valatile关键字的使用,我们今天就来总结一下这个关键字的使用吧!原创 2021-05-18 21:54:18 · 1436 阅读 · 0 评论 -
字符串常用函数c语言实现(编码规范,内存问题)
1,strlen2,gets/puts3.getc/putc4.strcpy/strncpy5,strstr6,strcat,strncat7,strcmp8,strlwr(转化为小写的函数)9,strupr(转化为大写的函数)10,char *strtok(char *str1, char *str2);查找由在第二个串中指定的分界符分隔开的单词11 strrchr 在串中查找指定字符的最后一个出现连接:https://baike.baidu.com/i..原创 2021-05-18 11:55:56 · 199 阅读 · 0 评论