
夜深人静C语言
文章平均质量分 50
学习笔记C语言部分
MrWang.
嵌入式工程师 Linux驱动以及应用程序的开发
知其然知其所以然,每一个文章都会详细解释并给出示例代码可上机运行
不足之处请大家提出,希望与大家一起进步,共勉!
展开
-
C语言C++堆栈打印方法
【代码】C语言C++堆栈打印方法。原创 2024-02-19 10:41:29 · 1636 阅读 · 0 评论 -
十六进制IP转换点分十进制代码
函数返回的是静态分配的内存空间,多次调用该函数会覆盖先前的结果。如果您需要在程序中保存多个IP地址,请将其复制到其他的内存区域或使用更加安全的函数进行转换。当您运行以上代码时,它将首先提示您输入一个十六进制格式的IP地址。请务必确保输入的字符串是正确的,且长度不超过8个字符(不包括字符串结尾符’\0’)。以下是一个可以实现将输入的十六进制格式的IP地址转换为点分十进制格式并输出的简单程序。函数将输入的字符串解析成无符号整数,然后使用。原创 2023-10-23 21:08:26 · 1403 阅读 · 0 评论 -
合并固件的软件ImageGEN
将文件按照以下格式合并为一个固件:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EUskiI92-1690851741920)(ImageGEN.assets/imagegen.jpg)]原创 2023-08-01 09:04:56 · 181 阅读 · 0 评论 -
一文秒懂static关键字
静态变量 count 在第一次调用 increment() 时被初始化为 0,然后在后续的函数调用中保持其值,不会重复创建和销毁。每次调用 increment() 函数时,count 的值都会自增,并使用 printf 函数输出当前的计数值。通过运行上述代码,您将看到每次调用 increment() 函数时,计数器的值都会增加,并按顺序输出相应的计数值。因此,变量的状态无法在多次函数调用之间保持。关键字时,变量在每次函数调用时都会重新初始化的特性。关键字时,变量在每次函数调用时都会重新初始化的特性。原创 2023-07-18 00:11:58 · 263 阅读 · 0 评论 -
C语言链表的使用及例代码
链表是一种常见的数据结构,用于实现各种算法和系统中的数据存储和管理。它是一个节点的集合,每个节点包含数据和指向下一个节点的指针。使用指针可以动态分配内存空间,因此可以在运行时添加或删除节点。需要注意的是,在释放链表内存空间时,应该从头节点开始遍历,并依次释放每个节点的内存空间。打印链表中的所有节点数据。向链表中添加三个节点。创建一个空链表,然后使用。原创 2023-06-22 10:06:38 · 1029 阅读 · 0 评论 -
IEEE 802.3 标准中规定的 CRC32 算法
话不多说直奔主题,下面是一个使用 IEEE 802.3 标准中规定的 CRC32 算法计算校验和的示例程序(使用 C 语言)。该示例程序实现了一个crc32函数,可以计算给定长度的数据的 CRC32 校验和。程序中包含了详细的注释,方便理解。示例程序中,crc32函数用于计算给定长度的数据的 CRC32 校验和。该函数接受两个参数,分别为指向待计算数据的指针和数据的长度。函数首先将多项式除数(0xEDB88320UL)赋给一个 32 位的 CRC 寄存器(变量crc),然后对待校验数据的每个字节进行处理。原创 2023-06-19 22:24:22 · 8454 阅读 · 0 评论 -
C语言随机生成mac地址的代码
函数,它会生成一组随机的 MAC 地址。该函数将第一个字节和第二个字节分别设置为 0,并将余下的 4 个字节填充为随机数。需要注意的是,在实际使用中,可能需要对生成的 MAC 地址进行格式检查和校验,以确保其符合规范并可以被网络设备正确识别和使用。函数用于生成指定范围内的随机整数。函数输出生成的 MAC 地址。该示例中,首先定义了一个。原创 2023-06-06 21:12:08 · 1483 阅读 · 0 评论 -
主函数调用子函数修改值
通过这个例子,我们可以看到如何使用指针和二级指针在函数之间传递参数并修改变量的值。在这个例子中,我们通过传递一级指针。的值,将它们分别设置为 2 和 4,并再次打印它们的值,可以看到它们都被成功修改了。运算符,因为指针本身就是地址。另外,如果你想要修改二级指针所指向的地址的值,则需要使用。的值,可以看到它们都是 1。的值,可以看到它们都是 1。需要注意的是,当我们在。的值,可以看到它们都已经被修改了。函数有两个参数,分别是一级指针。函数内部修改指针时,不需要添加。作为二级指针参数传递给。原创 2023-06-06 18:37:42 · 952 阅读 · 0 评论 -
字符串string转换长整型int(八进制、十进制、十六进制)
strtoul()是C语言标准库中用于将字符串转换成无符号长整数的函数。其中,nptr代表要被转换成无符号长整数的字符串;endptr是一个指向字符指针的指针,该指针指向已经转换了的最后一个字符的下一个位置;base指定要采用的进制,范围是2 ~ 36。该函数返回转换后的无符号长整数。如果在转换过程中发生错误,比如输入的数字超出了有效表示范围或格式不正确,那么该函数返回0,并将endptr指向传入的参数nptr的首地址。需要注意的是,在使用该函数转换字符串时,当base。原创 2023-05-28 18:15:09 · 2685 阅读 · 0 评论 -
IP地址打印格式
格式化打印IP地址,调试代码必备原创 2023-05-08 18:34:17 · 2563 阅读 · 0 评论 -
宏函数详解
需要注意的是,在使用宏函数时,实参的求值可能会被重复执行,因此要确保传入的实参没有副作用,避免产生不可预料的结果。宏函数是一种特殊的函数宏,与普通函数宏不同的是,它可以拥有多条语句和局部变量,从而实现更复杂的功能。总之,宏函数的使用可以提高代码的效率和灵活性,但是也容易引发一些意料之外的问题。因此,在使用时需要仔细考虑,如果复杂度较高的话,建议还是使用普通函数。这个宏函数定义了一个名为ADD的宏,其作用是求两个整数之和。扩展提供了允许对多条表达式进行求值,返回最后一个表达式的值。原创 2023-05-01 18:40:46 · 4071 阅读 · 0 评论 -
数据帧去掉VlanTag的代码(802.1Q)
需要注意的是,此函数假设输入的数据包已经包含Ethernet头部。如果要处理没有Ethernet头部的裸数据包,请在调用该函数之前添加按需添加Ethernet头部。另外,如果您只需要判断并不需要去除TAG,请直接删除strip_vlan()函数中的memmove()和最后一行代码即可。#define VLAN_TAG_LEN 4 // 固定的802.1Q Tag长度。这个函数接受指向数据包缓冲区的指针和缓冲区长度作为输入,在原地修改缓冲区内容。原创 2023-04-30 12:22:51 · 1063 阅读 · 0 评论 -
字节序(附测试本机字节序的代码)
请注意:虽然这种方法可以检测本机字节序,但是这不是一种可移植的方式。因为C语言规范并没有明确定义主机字节序,说不定某些实现可能不遵循传统的字节序,即使借助于系统头文件定义的字节序转换函数也不能完全保证可移植性。该程序首先定义了一个整数变量num,其十六进制值为0x12345678。然后将这个整数指针强制转换为指向字符类型的指针,并将其赋值给指针变量p。最后,程序输出结果以告知用户检测结果。原创 2023-04-30 10:49:17 · 1097 阅读 · 0 评论 -
网络字节序和主机字节序详解(附代码)
和是计算机网络中常用的两种。: 指的是在计算机内部存储数据时采用的字节排序方式。对于一个长为4个字节的整数,若采用大端字节序,则该整数在内存中的存储顺序是:以地址递增顺序依次存储其最高位到最低位的每个字节;若采用小端字节序,则该整数的字节则按照倒序的方式存储于内存中。例如,在大端字节序中,数字127的存储方式如下:: 指的是一种标准的字节序,规定了数据在网络数据传输中采用的字节序,即大端字节序,也被称为网络序(Network Byte Order)。原创 2023-04-30 10:42:00 · 5794 阅读 · 0 评论 -
C语言atoi函数详解
atoi是C/C++语言中一个常用的字符串转整数的函数,其原型定义在stdlib.h头文件中。它的作用是将一个字符串表示的数字转换为对应的整数。原创 2023-04-30 10:18:14 · 9651 阅读 · 0 评论 -
C语言read函数和pread函数
read函数的原型为:该函数用于从指定fd对应的文件中读取数据,并将读取到的数据存储到用户空间的buf中,其中参数 count。读取成功后,返回实际读取到的字节数;如果发生错误则返回-1。原创 2023-04-23 23:17:03 · 3016 阅读 · 0 评论 -
C语言十六进制IP地址转换为十进制
/ 将二进制格式的 IP 地址转换成点分十进制格式并打印。// 将十六进制格式的 IP 地址转换成二进制格式。原创 2023-04-22 14:06:59 · 1536 阅读 · 2 评论 -
C语言线程锁mutex
需要注意的是,线程锁应该仅在必要时才使用,否则可能会导致性能下降和死锁等问题。此外,在使用线程锁时,还需注意避免其他线程因为阻塞等原因长时间占用锁,从而影响程序的响应能力。在C语言中,线程锁(mutex)是一种用于控制对共享资源访问的同步机制。通过使用线程锁,可以避免不同线程之间同时访问共享资源而造成数据竞争的问题。原创 2023-04-22 13:38:58 · 2842 阅读 · 0 评论 -
C语言字符串拼接strcat和sprintf
strcat()和sprintf()都是在C语言中用于字符串拼接的库函数,不过它们有着不同的实现方式和使用场景。原创 2023-04-22 11:30:47 · 32075 阅读 · 2 评论 -
一次搞懂getchar()
从标准输入 stdin 获取一个字符(一个无符号字符),这等同于getc带有 stdin 作为参数。当程序调用getchar时.程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符。原创 2022-09-24 21:14:40 · 1471 阅读 · 0 评论 -
malloc在子函数中返回方式
如果传递的只是str,相当于只是把str的值 而str是指向NULL的,等于把NULL传递了过去,此时char **p= NULL;实际在子函数中确实分配到内存空间给p了,但是这时p和str毫无关系了,这时在子函数中分配的内存空间是无法成功返回到主函数内的,进而无法释放造成内存泄漏。而通过&str传递给子函数test2,此时二级指针p = &str,那么对*p的操作其实就是对str的操作了原创 2022-09-20 19:06:23 · 967 阅读 · 0 评论 -
echo重定向和cat重定向
(1)先创建两个文件:touch 1.txt (2)echo可以添加字符串到 1.txt echo "hello i am a cainiao" >> 1.txt原创 2022-09-18 10:11:15 · 2439 阅读 · 0 评论 -
C存储类型auto、static、extern、const、register、volatile。
static:静态局部变量auto:自动存储变量extern:外部变量原创 2022-03-14 09:46:07 · 1655 阅读 · 0 评论 -
回调函数理解
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。原创 2022-09-13 10:15:57 · 650 阅读 · 0 评论 -
数据元素、数据项、数据对象的概念详解
数据元素:数据的基本单位数据项 :独立包含的数据最小单位 若干数据项组成一个数据元素数据对象:相同数据元素的集合 若干数据元素组成数据对象原创 2022-04-26 23:58:14 · 3020 阅读 · 1 评论 -
c语言关键字
| auto |声明自动变量 |short|声明短整型变量或函数||int |声明整型变量或函数 ||long|声明长整型变量或函数原创 2022-03-09 08:46:51 · 128 阅读 · 0 评论 -
自增自减 a++、++a详解
1. ++a,先加一后赋值 要想从根源理解这个,首先要知道,++是一个自增运算符,自增有两种形式,前缀自增(++a)和后缀自增(a++),还要区分开操作数和表达式是两个东西。 运算符和操作数合起来就是表达式 ,即(++a)就是一个表达式,而a是操作数上例子,我们所说的加1,指的是操作数加1那么++a就可以理解成a这个操作数先进行加1操作,即表达...原创 2022-04-18 10:01:35 · 2823 阅读 · 0 评论