c语言
折花刀
勤能补拙是良训,一份辛苦一份才
展开
-
单链表如何删除当前节点?不从头遍历如何删除?
在单链表中,如果不从头遍历且只有当前节点的指针,通常的方法是将当前节点的下一个节点的数据复制到当前节点,然后删除当前节点的下一个节点。这种方法不适用于删除最后一个节点,因为它没有下一个节点的数据可以复制。如果需要删除的是最后一个节点,这种方法将失效,通常需要从头遍历来定位前一个节点来进行删除。原创 2024-05-18 10:15:19 · 377 阅读 · 0 评论 -
std::function与回调函数的区别
同时std::function也更加通用,你可以用其存储任何可以被调用的对象(callable object),只要有正确的函数签名即可。利用std::function你不但可以保存一段代码,同时也可以保存必要的上下文,然后在合适的地方基于上下文调用这段代码。,这里的上下文就是指代码依赖的数据,你不得不自己动手构造出一个结构体用来存储代码依赖的上下文。std::function的作用本质上和我们刚才定义的结构体区别不大。,就是因为函数指针没有办法捕捉this(指向对象的指针)这个上下文。原创 2024-02-07 14:36:21 · 412 阅读 · 0 评论 -
rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread) has assert failed at原因分析
rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread) has assert failed at原创 2022-06-24 16:24:22 · 3217 阅读 · 0 评论 -
蓝牙完整协议栈对照图
图片来自:传统蓝牙RFCOMM协议概念介绍-Bluetooth rfcomm_Wireless_Link的博客-CSDN博客_蓝牙rfcomm协议零. 概述本文章主要讲下蓝牙RFCOMM协议(bluetooth rfcomm)的概念以及在整个蓝牙协议栈中的起的作用一. 声明本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬..原创 2022-05-19 11:43:36 · 924 阅读 · 0 评论 -
fopen/fread对比open/read线程安全性分析
fopen,fread与open,read分别属于两套接口,open,read更偏底层属于系统调用在项目中用到了fopen,fread,fseek组合使用时,存在线程安全问题,需要加锁,也就是lock() //加锁fopenfseekfreadfcloseunlock() //解锁原因是每个线程fopen时都会有一条独立的IO流,但是这些IO流在底层缓存时存在线程安全的问题相比起来open,read接口组合使用时,就不存在线程安全的问题,已经测试过,不需要加锁...原创 2021-11-23 17:44:16 · 2298 阅读 · 0 评论 -
librws是如何发送报文的------之rws_socket_connect详解
librws是小型跨平台websocket客户端C库因为分析rws_socket_send_text函数时,只看到时给socket结构体的的send_frames添加节点,没看到发送的代码,实在太疑惑,于是分析了下librws的代码,找到了原因下边分析下rws_socket_connect函数rws_socket_connect函数最后return rws_socket_create_start_work_thread此函数中会创建一个线程rws_socket_work_th_func.原创 2021-10-18 20:35:28 · 891 阅读 · 3 评论 -
一文看懂字符数组与字符指针的异同
#include <iostream>using namespace std;int main() { char s[]="abc"; //未知长度的字符数组必须初始化 char *ptr="abc"; cout<<sizeof(s)<<endl; //4 abc后边有一个\0 cout<<sizeof(ptr)<<endl; //指针大小 64位下式8...原创 2021-08-15 10:52:23 · 175 阅读 · 0 评论 -
c语言打印二叉树树形结构(转载自:http://blog.csdn.net/xzongyuan)
#include#include#include#define NUM 5typedef struct _node{ int value; struct _node *left; struct _node *right;}TNode,*Tree;//add a *next in q_node is my purpose//other wise , we need原创 2017-01-17 14:00:55 · 7652 阅读 · 0 评论 -
c语言getopt解析命令行参数实例包括长参数与短参数
#include #include #include void get_option(int argc, char **argv){ char *cmd = argv[0]; while (1) { int option_index = 0; struct option long_option原创 2017-01-16 15:20:47 · 3588 阅读 · 0 评论 -
c语言一个完整可执行的多线程openssl实例服务端+客户端
//服务器端#include #include #include #include #ifndef _WIN32#include #include #include #include #include #include #else#include #include #endif#include "pthread.h"#include #include #原创 2017-01-11 14:34:11 · 3263 阅读 · 0 评论 -
c语言结构体及成员的互换,并且打印结构体地址和成员地址
#include #define offsetof(TYPE , MEMBER)((size_t) &((TYPE *)0)->MEMBER)//container_of是给定结构体某个成员的地址反推其结构体地址#define container_of(ptr , type , member)({ \const typeof(((type *)0)->member)*转载 2017-01-13 17:45:27 · 7124 阅读 · 0 评论 -
求结构体成员偏移量的三种方法
#include #include typedef struct { char a; int b; double c;}type_t;//第一个OFFSET宏//#define OFFSET(TYPE , MEMBER , OFF) \ TYPE temp; \ OFF = (unsigned long)(&原创 2017-01-13 16:27:48 · 4971 阅读 · 0 评论