自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 结构体的声明和内存对齐

首先申请1个字节(char),a占3个bit,b占4个bit,c要占5个bit但是空间不够,直接浪费,再往后申请1个字节。c2的大小是1个字节,VS默认是8,他两的较小值是8,所以对齐数数1,所以c2只占一个字节,所以加起来为9。c1占1个字节,c2也是1,但是i的偏移量要是4的整数倍,所以必须是4开始,1+3+4=8个字节。因为所有最大对齐数是8,所以内存是8的倍数,32是8的倍数,所以结构体大小是32。c1的对齐数是1,i的对齐数是4,c2的对齐数是1,所以最大对齐数是4,

2024-08-20 20:50:40 721

原创 数据在内存中的存储

大端字节序存储:把一个数据的低位字节的内容存储到高地址处,把高位字节的内容存储到低地址处也就是把高位的11存储到了低地址处小端字节序存储:把一个数据的低位字节的内容存储到低地址处,把高位字节的内容存储到高地址处高位 0x 11 22 33 44 低位大小端字节序都有可能存在,而vs中是小端字节序存储,所以我们看到是倒着存储的值。

2024-07-24 15:19:14 780 2

原创 C语言的字符函数和字符串函数使用和模拟实现

会陷入死循环,因为在拷贝的过程中,两个数组是相同的,arr1的/0已经拷贝成了a,arr1拷贝完f后没有\0来停止循环,所以会进入死循环。先打印传给perror的字符串,再打印冒号,再打印空格,最后打印错误码对于的错误信息。如果长度超过字符的长度,它并不会自己多追加\0,追加完所有的字符串长度后就不会再追加了。只拷贝长度为3的字符,所以只拷贝到了abc,并且没有拷贝/0,只拷贝了3个。如果是拷贝长度为8,比字符串的长度更长,他会凑满8个,后面两个拷贝2个\0。目标字符必须包含\0,足够大,可修改。

2024-07-16 11:03:55 794

原创 C语言内存函数

如果想将每个元素设置为1,memset(arr,1,20)这样写是错误的,函数是以字节为单位设置的,他会将每个字节设置为1 ,不是将每个元素设置为1。比较从ptr1和ptr2指针指向的位置开始,向后的num个字节。设置内存的函数,将内存中的值以字节为单位设置成想要的内容。比前16个字节,也就是前四个元素,返回值为0——相等。比前17个字节,返回值为-1——小于。所以从前往后复制是行不通的。ptr指向填充的内存块。value你要填充的值。

2024-07-13 13:37:50 765

原创 strstr的使用和模拟实现

【代码】strstr的使用和模拟实现。

2024-07-10 12:52:11 295

原创 深入理解指针

arr+1 之间跳过了40个字节,因为是跳过了整个数组,所以跳过了10*4=40个字节。数组就是数组,是连续的一块空间(数组大小和数组元素的个数和元素类型都有关系)当实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的修改不会有影响。int *:说明pp执行的p的类型是int *,说明的是指向的对象的类型。指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)数组传参的时候,形参是可以写成数组的形式的,但本质还是指针。int **:说明pp是一个的类型是int * *

2024-05-31 21:35:58 1041

原创 深入理解指针

因为( )比[ ]的优先级更高,所以必须加上(),不然就变成了p[10]数组了。signal (int,void (*) ( int ) )是函数的声明。如果我们有3个函数的地址要存放到一个数组中,那这个数组就是函数指针数组。比如unsigned int你觉得不方便就可以写成unit。void (*) (int)是函数指针变量的类型。是用来类型重命名的,可以将复杂的类型简单化。将+ - * /的值全部打印出来了 ‘可以通过指针去调用这个函数。

2024-05-27 22:46:25 503

原创 单身狗(在一个数组中,找出两个只出现一次的数字)

如何找到第k位为1将异或的结果&1001100010001——k=1如果得到了的结果有1,则该位数为1就是k的值,k=1如果没有得到1,全为0,则将>>1再&1,得到的结果里有1后,k++,k=20001 00010000 0001——k=2,得到是第2位的bit位不相同。

2024-05-17 17:48:11 172 1

原创 bugku——文件上传——web——shell

explode() 函数使用一个字符串分割另一个字符串,并返回由字符串组成的数组。separator:在哪里分割字符串。limit:规定数组元素的个数。string:要分割的字符串。

2024-05-04 21:28:23 287

原创 详解操作符

输入n的值,在内存中存的是-1的补码,当n强制转化为1,所以它的原码和补码都相同了,因为没有符号位,就变成了一个很大的整数。有符号的整数三种表示方法均有符号位和数值位两个部分,最高位的1位是当作符号位,其他都是数值位。反码=11111111 11111111 11111111 11110101(0变成1,1变成0)补码=11111111 11111111 11111111 11110110(在反码的基础上加1)对于整形来说,数据存放内容其实存放的是补码,数值的计算也使用的是补码。

2024-04-23 21:24:39 665

原创 冒泡排序(c语言)

所以我们添加了一个flag变量去判断该数组到底是否是有序或无序。可能数组本来就是有序的,但是却一直在排序,

2024-04-23 20:59:09 300

原创 获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列

【代码】获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列。

2024-04-15 21:28:28 185 1

原创 用c语言找出数组中只出现一次的数字

在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。例如:数组中有:1 2 3 4 5 1 2 3 4,只有5出现一次,其他数字都出现2次,找出5

2024-04-15 21:08:16 233 1

原创 攻防世界——web——unserialize3(反序列化)

一、序列化将对象的状态信息转换为可以存储或传输的形式的过程,简单来说,就是将对象转化为字节序列的过程二、反序列把字节序列恢复为对象的过程称为对象反序列

2024-04-05 17:25:20 629 1

原创 ctfhub——备份文件下载——vim缓存、.DS_Store

备份文件——vim缓存.DS_Store

2024-04-05 17:15:53 452 1

原创 ctfhub——命令行注入

这段代码首先检查是否存在名为ip的GET参数,并且该参数的值不为空。如果满足条件,将获取GET参数ip的值赋给变量$ip。接着,创建一个空数组$m,然后通过正则表达式preg_match_all("/\//", $ip, $m)来检查$ip中是否包含斜杠/。如果$ip中包含斜杠,则直接将匹配结果存储在数组$res中。既然不能使用目录分隔符,那我们就先进入目录再去查看文件。打开控制台发现代码里面出现了flag,即通过成功。运算符都被过滤掉了,我们也可以使用;回显空白,得到flag。回显空白,得到flag。

2024-04-05 17:11:46 366 1

原创 使用c语言实现扫雷游戏

• 使⽤控制台实现经典的扫雷游戏• 游戏可以通过菜单实现继续玩或者退出游戏• 扫雷的棋盘是9*9的格⼦• 默认随机布置10个雷• 可以排查雷◦ 如果位置不是雷,就显⽰周围有几个雷◦ 如果位置是雷,就炸死游戏结束◦ 把除10个雷之外的所有非雷都找出来,排雷成功,游戏结束

2024-03-22 00:21:03 823 1

原创 函数的简单介绍

返回类型 函数名ret_type fun_name(形式参数)函数体返回类型可以是void函数名一般要取得有意义函数先声明后使用如果未进行声明时,函数的定义在函数使用的后面,则编译器会报错。因为编译器在对源码进行编译时,从第一行向下扫描,使用时并未扫描到函数的定义就会爆出警告所以我们需要解决这一问题的话:函数声明函数的定义是一种特殊的声明,所以如果函数定义在函数调用前也是可以的。

2024-03-11 11:06:03 794 1

原创 分支与循环语句(下)

因为srand要的是unsigned int,但time生成的不是该类型,所有需要强制类型转换。玩家猜数字,猜数字的过程中,根据猜测数据的大小给出猜大了或猜小了给出反馈。初始化随机数的生成器,在调用rand()前先调用srand()分析:判断i是否是素数时,用2~i-1的数字去试除i。again这个符号不是固定的,他是可以任意改的。比如判断7是否为素数,用2~6的数字去试除i。找出100~200的素数,并打印在屏幕上。基准值不同,则生成的随机数就不一样。电脑自动生成1~100的随机数。

2024-02-16 22:42:43 404 1

原创 分支和循环语句(上)

1.C语言是结构化的程序设计语言。结构有:顺序结构、选择结构、循环结构。

2024-02-11 17:58:22 596

原创 C语言的类型与变量

(2) 尽管变量y的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,而不是 1.5。原因就在于 C 语 言里的整数除法是整除,只会返回整数部分,丢弃小数部分。%*c :只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。不会包含空白字符,读取从第一个非空白字符开始读取,读到空白字符就停止读取。打印时,占位符要和数据类型匹配,否则会得到错误的结果。除号两端是整数,则执行整数除法,得到的结果也为整数。(1)用%f打印整数,计算的结果就一定是错误的。

2024-02-08 15:35:01 941

原创 C语言:数组练习一

多个字符从两端开始移动,向中间汇聚

2024-02-07 19:47:43 354

原创 C语言常见概念

1.字符串末尾隐藏着一个\0,这个\0字符是字符串的结束标志。使用printf()打印字符串或者strlen()计算字符串长度的时候,遇到\0就自动停止了。C语言源代码都是文本文件,但是文本文件本身无法执行,必须通过编译器翻译和链接器的链接,生成二进制的可执行文件,可执行文件才能执行。4.strlen()求字符串长度的时候,统计的是\0之前字符的个数,不包括\0。strlen()只要遇到\0他就不会计算后面的字符个数了,只算\0前面的字符。2.因为arr2字符串没有结束标注\0,所以他会自己打印其他内容。

2024-02-07 19:10:53 853

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除