C语言
执持名号
这个作者很懒,什么都没留下…
展开
-
brk/srbk的应用:在不知道个数的情况下为同类型的数据分配内存
1. 前言 看了一些写brk/sbrk的技术文章,整体看的还是一头雾水,我这里就不写那些晦涩难懂的解释,只写一个简单的例子,介绍下其使用场景。 对于一个已知数量的结构分配内存,我们一般都是用的malloc/free。如果我们不知道数量呢? 比如说给你一堆同类型的数据,让你把满足某些条件的数据保存下来。通常我们的做法是先遍历一遍这堆数据,找到满足条件的个数,然后根据个数用malloc分配内存,然后再遍历一遍把满足条件的个数保存到内存。 这里面有两个问题需要注意: 1.这里我们遍历了两遍,效率太低; 2.如果这原创 2020-10-15 19:31:56 · 274 阅读 · 0 评论 -
利用结构体成员偏移量和结构体成员地址求结构体的地址
利用结构体成员偏移量和结构体成员地址求结构体的地址 1. 前言 在实际项目开发中,发现了两个有意思的宏定义。 #define offsetof(type, member) ((unsigned long)(&((type *)0)->member)) #define LIST_ENTRY(optr, type, member) ((type *)((char *)(optr) - offsetof(type, member))) 第一个是求结构体成员的偏移量。假设在地址0处有一个type类原创 2020-10-14 17:29:10 · 637 阅读 · 0 评论 -
实现从包含‘\0‘的主字符串中匹配指定的子字符串的函数
从包含’\0’的主字符串中匹配指定的子字符串 1.前言 在做项目的过程中,处理pcap数据包,对包里的内容进行字符查找时,要注意对’\0’的处理。举个列子,下图中是wireshark打开的一个http2的数据包,比方你想从流里面查找“3gpp.ngap”这个子串,如果直接用strstr函数去查找,就查找不到该子串。因为其查找遇到‘00‘就停止了,他认为遇到了字符串的结束标志。因此这个时候需要自己手动去实现一个可以从包含’\0’的主字符串中匹配指定的子字符串的函数。 因此自己实现了一个从包含’\0’的主字符串原创 2020-10-13 17:50:34 · 279 阅读 · 1 评论 -
越界导致函数参数的地址改变
越界导致函数参数的地址改变1.前言2.代码3.总结4.问题 1.前言 最近做的项目当中,遇到了一个函数的参数地址被改变的问题,导致后面系统崩溃。现将其提炼成一段小代码,记录如下。 2.代码 #include <stdio.h> #include <stdlib.h> #include <string.h> void func(char *param, char *s, char *buf) { //模拟做了一些解码处理,然后把一段字符赋值给buf //但是没有对长度做原创 2020-10-12 19:56:26 · 396 阅读 · 0 评论