【指针笔试题上】你知道大厂面试题的指针题是什么样的吗?快来通过这些面试题目检测一下自己吧!

news2025/1/16 7:58:08

目录

前言:

一.strlen和sizeof的区别

二.一维数组笔试题解析

三.二维数组笔试题解析

四.总结:


博客主页:张栩睿的博客主页

欢迎关注:点赞+收藏+留言

系列专栏:c语言学习

        家人们写博客真的很花时间的,你们的点赞和关注对我真的很重要,希望各位路过的朋友们能多多点赞并关注我,我会随时互关的,欢迎你们的私信提问,也期待你们的转发!

        希望大家关注我,你们将会看到更多精彩的内容!!!

前言:

        相信大家在之前的学习对于指针这一块的知识是比较头疼的,通过下面的题目,我相信你会真正检测出自己的指针是否真的学的扎实了!

在开始之前,我们来看看数值名意义的总结,这个是本篇文章的重中之重

1. sizeof(数组名),数组名表示整个数组。计算的是整个数组的大小,单位是字节

2. &数组名,数组名表示整个数组。取出的是整个数组的地址.

3.其他所有的数组名都是数组首元素的地址.

一.strlen和sizeof的区别

sizeof()

是一个操作符
只关注占用内存空间的大小,单位是字节,不关心内存中存放的是什么,'\0'会被包含在内

注:

        sizeof只关注占用空间的大小,放在()内的表达式是不会参与运算的。

解析:

  1. sizeof(s=s+3)的值为:2;表示 sizeof只看它的类型大小,short类型大小为2,而不会具体去看表达式的值;
  2. printf(“%d\n”,s)的值还是3,表示sizeof并不计算表达式的值;

        

        表达式最终的类型是short,cpu只知道两个整形相加,保存在short类型里面,所以sizeof计算的是short的内存大小。实际上,我们sizeof的使用是在编译期间使用的,而表达式的运算在运行期间执行,时间不一样。c语言程序的实现顺序如下:

 实际上,c语言的表达式有两个属性,

比如2+3

1.值属性:5

2.类型属性:int

strlen

是一个库函数
是求字符串长度的,统计的是\0之前(\0不算在内)出现的字符个数,一定要找到\0才算结束,所以可能存在越界访问的

关于库函数strlen()的定义:

        是用来求字符串长度的,形参设置为一个char类型的指针,所以我们传参的时候都是传的都是地址,而srtrlen()收到一个地址后,将会从这个地址以每次访问一个字节的空间大小,开始一直扫描,直到扫描到\0后停止;

二.一维数组笔试题解析

sizeof的一维数组:

        整形数组:

int main() {
   int a[] = { 1,2,3,4 };
   printf("①	%d\n", sizeof(a));
   printf("②	%d\n", sizeof(a + 0));
   printf("③	%d\n", sizeof(*a));
   printf("④	%d\n", sizeof(a + 1));
   printf("⑤	%d\n", sizeof(a[1]));
   printf("⑥	%d\n", sizeof(&a));
   printf("⑦	%d\n", sizeof(*&a));
   printf("⑧	%d\n", sizeof(&a + 1));
   printf("⑨	%d\n", sizeof(&a[0]));
   printf("⑩	%d\n", sizeof(&a[0] + 1));
}

结果: 

                               在这里插入图片描述  

解析:

int a[]={1,2,3,4};
printf(“%d\n”,sizeof(a));
解:sizeof(数组名),计算的是整个数组的大小:4x4=16


printf(“%d\n”,sizeof(a+0));
解:a+0表示首元素的地址,不属于sizeof(数组名)类型,所以sizeof(a+0)表示计算的是首元素地址的大小;地址大小在32位操作系统是4字节,64位操作系统是8字节;


printf(“%d\n”,sizeof(*a));
解:a表示数组首元素的地址,*a表示对这个地址解引用,就是数组第一个元素的值。sizeod(*a)表示计算第一个数组元素值的大小,而数组是整型数组,其中每个元素都是int类型,在内存中占4个字节;


printf(“%d\n”,sizeof(a+1));
解:a+1表示数组第二个元素的地址,sizeof(a+1)表示计算地址大小,4/8;


printf(“%d\n”,sizeof(a[1]));
解:a[1]表示第二个元素,sizeof(a[1])表示计算第二个元素的大小,结果为4字节;


printf(“%d\n”,sizeof(&a));
解:&a表示整个数组的地址,sizeof(&a)表示计算整个数组地址大小,为4/8;

&a---> 类型:int(*)[4]


printf(“%d\n”,sizeof(*&a));
解:&a是数组的地址,*&a就是拿到了数组,*&a--> a,a就是数组名,sizeof(*&a)-->sizeof(a),sizeof(*&a)表示计算整个数组大小,为16字节;


printf(“%d\n”,sizeof(&a+1));
解:&a+1表示整个数组+1之后的地址,sizeof(&a+1)表示对数组后面的地址进行计算,地址的大小为4/8;


printf(“%d\n”,sizeof(&a[0]));
解:&a[0]是首元素的地址,计算的是首元素地址的大小,4/8字节


printf(“%d\n”,sizeof(&a[0]+1));
解:表示计算第二个元素的地址,4/8;其实这里是指:&*(a+0),等价于a+0我们要知道这个+0非常重要,真的不能省略!省略就变成sizeof(数组名)了

字符数组:  

char arr[] = { 'a','b','c','d','e','f' };
	printf("①	%d\n", sizeof(arr));
	printf("②	%d\n", sizeof(arr + 0));
	printf("③	%d\n", sizeof(*arr));
	printf("④	%d\n", sizeof(arr[1]));
	printf("⑤	%d\n", sizeof(&arr));
	printf("⑥	%d\n", sizeof(&arr + 1));
	printf("⑦	%d\n", sizeof(&arr[0] + 1));

                                    在这里插入图片描述

解析:

char arr[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’};
printf(“%d\n”,sizeof(arr);
解:arr单独放在sizeof内部,计算的是整个数组的大小,单位是字节,6;


printf(“%d\n”,sizeof(arr+0);
解:计算的是数组第首元素地址的大小,4/8;


printf(“%d\n”,sizeof(*arr);
解:计算的是数组首元素大小,为1字节;


printf(“%d\n”,sizeof(arr[1]);
解:计算数组第二个元素大小,1字节;


printf(“%d\n”,sizeof(&arr);
解:取出的数组的地址,数组的地址也是地址,是地址大小就是4/8


printf(“%d\n”,sizeof(&arr+1);
解:&arr + 1是跳过整个数组的地址,是4/8字节


printf(“%d\n”,sizeof(&arr[0]+1);
解:计算的是第二个元素地址大小,4/8;

char arr[] = { 'a','b','c','d','e','f' };
	printf("①	%d\n", strlen(arr));
	printf("②	%d\n", strlen(arr + 0));
	printf("③	%d\n", strlen(*arr));
	printf("④	%d\n", strlen(arr[1]));
	printf("⑥	%d\n", strlen(&arr));
	printf("⑦	%d\n", strlen(&arr + 1));
	printf("⑧	%d\n", strlen(&arr[0] + 1));

解析:

printf(“%d\n”,strlen(arr));
解:随机值,因为我们知道strlen()函数根据首元素地址,计算字符串,是以\0结束;如果扫描不到\0,它就会一直在内存中扫描下去,直到遇见\0为止;


printf(“%d\n”,strlen(arr+0));
解:随机值,同上;


printf(“%d\n”,strlen(*arr));
解:我们知道,库函数strlen()它的参数是一个字符指针,如int strlen(const char *str);而*arr表示对字符数组首元素解引用,即是访问’a’字符,而我们又知道’a’字符在内存中表示为ASCLL码,为97,而97这个数组传给strlen()函数时,它会把它当成一个地址来访问,我们也不知道地址97里放的啥,会报错。strlen('a')->strlen(97),非法访问。


printf(“%d\n”,strlen(arr[1]));
解:arr[1]表示字符’b’,分析同上,报错;


printf(“%d\n”,strlen(&arr));
解:&arr虽然是数组的地址,但是也是从数组起始位置开始的,计算的还是随机值

这个时候类型不统一,&arr类型为char (*)[6],但不会报错。


printf(“%d\n”,strlen(&arr+1));
解:随机值;&arr是数组的地址,&arr+1是跳过整个数组的地址,求字符串长度也是随机值。但是这个随机值和strlen(&arr)的随机值是相差6字节的;


printf(“%d\n”,strlen(&arr[0]+1));
解:&arr[0] + 1是第二个元素的地址,是'b'的地址,求字符串长度也是随机值

字符串数组:

char arr[] = "abcdef";
	printf("①	%d\n", sizeof(arr));
	printf("②	%d\n", sizeof(arr + 0));
	printf("③	%d\n", sizeof(*arr));
	printf("④	%d\n", sizeof(arr[1]));
	printf("⑤	%d\n", sizeof(&arr));
	printf("⑥	%d\n", sizeof(&arr + 1));
	printf("⑦	%d\n", sizeof(&arr[0] + 1));
	printf("⑧	%d\n", strlen(arr));
	printf("⑨	%d\n", strlen(arr + 0));
	printf("⑩	%d\n", strlen(*arr));
	printf("11	%d\n", strlen(arr[1]));
	printf("12	%d\n", strlen(&arr));
	printf("13	%d\n", strlen(&arr + 1));
	printf("14	%d\n", strlen(&arr[0] + 1));

结果:

解析:

[a b c d e f \0]

1.printf(“%d\n”,sizeof(arr));
解:sizeof()计算字符串长度时会把字符串后面自带的\0计算进去,所以为7字节;


2.printf(“%d\n”,sizeof(arr+0));
解:计算首元素地址,4/8字节


3.printf(“%d\n”,sizeof(*arr));
解:*arr是数组首元素,大小是1字节


4.printf(“%d\n”,sizeof(arr[1]));
解:计算第二个元素大小,1字节;


5.printf(“%d\n”,sizeof(&arr));
解:计算整个数组的地址,4/8;


6.printf(“%d\n”,sizeof(&arr+1));
解:&arr + 1是跳过整个数组的地址,是4/8字节


7.printf(“%d\n”,sizeof(&arr[0]+1));
解:计算第二个元素的地址大小,4/8


8.printf(“%d\n”,strlen(arr))
解:strlen计算字符串长度,遇到字符串后\0,停止;字符数组arr大小为6字节;


9.printf(“%d\n”,strlen(arr+0))
解:arr+0表示首元素地址,但我们知道strlen要遇到\0才停止,所以会扫描完整个字符数组,结果为6字节;


10.printf(“%d\n”,strlen(*arr))
解:*arr是'a',是97,传给strlen是一个非法的地址,造成非法访问


11.printf(“%d\n”,strlen(arr[1]))
解:报错;
 

12.printf(“%d\n”,strlen(&arr))
解:6字节,我们知道strlen的形参为char*类型,即字符指针,每次访问一个字节,当我们传&arr整个字符数组的地址给strlen时,它会从这个地址开始,一个字节一个字节的往后访问,直到遇到\0为止,它不会以整个字符数组的大小来访问;


13.printf(“%d\n”,strlen(&arr+1))
解:随机值;字符数组后的内存空间我们不知道具体存放内容


14.printf(“%d\n”,strlen(&arr[0]+1))
解:&arr[0]+1是b的地址,从第二个字符往后统计字符串的长度,大小是5

如果换成指针形式呢?

char* p = "abcdef";
	printf("①	%d\n", sizeof(p));
	printf("②	%d\n", sizeof(p + 1));
	printf("③	%d\n", sizeof(*p));
	printf("④	%d\n", sizeof(p[0]));
	printf("⑤	%d\n", sizeof(&p));
	printf("⑥	%d\n", sizeof(&p + 1));
	printf("⑦	%d\n", sizeof(&p[0] + 1));
	printf("⑧	%d\n", strlen(p));
	printf("⑨	%d\n", strlen(p + 1));
	printf("⑩	%d\n", strlen(*p));
	printf("11	%d\n", strlen(p[0]));
	printf("12	%d\n", strlen(&p));
	printf("13	%d\n", strlen(&p + 1));
	printf("14	%d\n", sizeof(&p[0] + 1));

                                         

解析:
char *p = “abcdef”//把字符串首地址放到指针p里;
 

1.printf(“%d\n”,sizeof(p));
解:p是指针变量,大小就是4/8字节


2.printf(“%d\n”,sizeof(p+1));
解:计算第二个元素地址大小,4/8


3.printf(“%d\n”,sizeof(*p));
解:计算第一个元素大小,1


4.printf(“%d\n”,sizeof(p[0]));
解:计算第一个元素大小,1


5.printf(“%d\n”,sizeof(&p));
解:&p是二级指针,是指针大小就是4/8


6.printf(“%d\n”,sizeof(&p+1));
解:计算二级指针+1后的地址大小,4/8


7.printf(“%d\n”,sizeof(&p[0]+1));
解:计算第二个元素地址大小,4/8


8.printf(“%d\n”,strlen(p));
解:大小为6;p是指针,存放的是字符串首元素的地址,传参给strlen的是首元素的地址,strlen函数就会找到第一个元素,并从第一个元素向后扫描,直到遇到\0后结束;


9.printf(“%d\n”,strlen(p+1));
解:大小为5;p+1表示的是字符串第二个元素的地址,strlen会找到第二个元素,并从第二个元素开始扫描,直到遇见\0为止;

10.printf(“%d\n”,strlen(*p));
解:报错;*p表示对指针解引用,就是访问地址里所指向的数值,即此时的值是字符’a’,,而a字符在内存中是以ASCLL码存放,为数值97 ,而strlen接收到这个数值“97”后,会把它当初一个地址,去访问内存中97处的数值,此时编译器就会报错,我们也不知道97地址处存放的是啥;

11.printf("%d\n", strlen(p[0]));err - 同上一个

12.printf("%d\n", strlen(&p));//&p拿到的是p这个指针变量的起始地址,从这里开始求字符串长度完全是随机值

13.printf("%d\n", strlen(&p + 1));//&p+1是跳过p变量的地址,从这里开始求字符串长度也是随机值


14.printf("%d\n", strlen(&p[0] + 1));//&p[0] + 1是b的地址,从b的地址向后数字符串的长度是5 

三.二维数组笔试题解析

首先我们来复习一下二维数组:

        a数组名除了那两种情况,都表示第一行的地址,类型为数组指针类型,所以a+1表示第二行的地址,如果我们对他解引用(或者[]),此时的*a(a[0])就是指针指向的数组的首元素地址,类型为int类型,所以我们所说的a[0]+1指的是第一行第二列的地址。

int main()
{
	二维数组
	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(a[0][0]));
	printf("%d\n", sizeof(a[0]));
	printf("%d\n", sizeof(a[0] + 1));
	printf("%d\n", sizeof(*(a[0] + 1)));
	printf("%d\n", sizeof(a + 1));  
	a - int (*)[4]
	a+1--> int(*)[4]
	printf("%d\n", sizeof(*(a + 1)));
	printf("%d\n", sizeof(&a[0] + 1));
	printf("%d\n", sizeof(*(&a[0] + 1)))
	printf("%d\n", sizeof(*a));
	*a -- *(a+0)--a[0]
	printf("%d\n", sizeof(a[3]));//16字节 int[4]
	

解析:


    二维数组
    int a[3][4] = { 0 };

1.printf("%d\n", sizeof(a));a为数组名,表示整个数组,48 = 3*4*4


2.printf("%d\n", sizeof(a[0][0]));第一个元素,四个字节


3.printf("%d\n", sizeof(a[0]));//a[0]是第一行的数组名,数组名单独放在sizeof内部,计算的就是数组(第一行)的大小,16个字节


4.printf("%d\n", sizeof(a[0] + 1));//a[0]作为第一行的数组名,没有单独放在sizeof内部,没有取地址,表示的就是数组首元素的地址,那就是a[0][0]的地址,a[0]+1就是第一行第二个元素的地址,是地址就是4/8个字节


5.printf("%d\n", sizeof(*(a[0] + 1)));//*(a[0] + 1)是第一行第2个元素,计算的是元素的大小-4个字节


6.printf("%d\n", sizeof(a + 1));//a是二维数组的数组名,数组名表示首元素的地址,就是第一行的地址,a+1就是第二行的地址,第二行的地址也是地址,是地址就是4/8   
    a - int (*)[4]
    a+1--> int(*)[4]


7.printf("%d\n", sizeof(*(a + 1)));//a+1是第二行的地址,*(a+1)表示的就是第二行,*(a+1)--a[1]  //16


8.printf("%d\n", sizeof(&a[0] + 1));//&a[0]是第一行的地址,&a[0]+1是第二行的地址,地址的大小就是4/8


9.printf("%d\n", sizeof(*(&a[0] + 1)));//*(&a[0] + 1) 是对第二行的地址解引用,得到的就是第二行,计算的就是第二行的大小4/8


10.printf("%d\n", sizeof(*a));//a表示首元素的地址,就是第一行的地址,*a就是第一行,计算的就是第一行的大小
    *a -- *(a+0)--a[0]


11.printf("%d\n", sizeof(a[3]));//16字节 int[4]
    16;a[3]其实是第四行的地址(如果存在的话),其实在内存中并不存在a[3],但是sizeof并不会计算表达式的值,它也会通过表达的类型计算它所占空间大小;我们知道,一个表达式:int a= 3+5;a有两个属性,一个值属性:8,一个类型属性:int,而size of()是计算变量所占空间大小,即表达式的类型所占空间大小,它并不会计算表达式的值。

四.总结:

        通过这些题目,我们对数组和指针有了更深入的了解,其实说白了就是理解清楚变量的类型,然后知道数组名在不同情况下的区别就可以轻松做出。

        辛苦各位小伙伴们动动小手,三连走一波 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【自学Docker】一文解决Docker安装

Docker Centos安装 Docker版本 Docker 从 1.13 版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。 Docker社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器…

1.1 java 基础语法

目录 一、Java 基础语法 (1)对象: (2)类: (3)方法: (4)实例变量: 二、如何运行java程序(前提是java的环境已经创建完…

19.Isaac教程--C语言接口(Isaac C API)

Isaac C API ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录Isaac C API程序流程和消息格式ROS示例独立示例启动和停止应用程序向 Isaac 应用程序发布消息从 Isaac 应用程序接收消息语言环境设置示例消息ImageProtoRangeScanProtoStateP…

C语言 八皇后(包含错误代码及分析)

基本思路:用递归思想解决,在8*8的棋盘放置8个皇后,则放置成功会每行有且仅有一个皇后(因为皇后不能同行),所以可以循环行,尝试在某列放置,和 全排列 http://t.csdn.cn/kvIXC 的解决方…

vulnhub DC系列 DC-4

总结:爆破,teehee提权 目录 下载地址 漏洞分析 信息收集 密码爆破 命令执行 ​编辑 ssh爆破 提权 下载地址 DC-4.zip (Size: 617 MB)Download: http://www.five86.com/downloads/DC-4.zipDownload (Mirror): https://download.vulnhub.com/dc/D…

远程连接mysql报错:1130 - Host XXX is not allowed to connect to this MySQL server

问题描述 1130 - Host 123.120.193.96 is not allowed to connect to this MySQL server 译:不允许主机 123.120.193.96 连接到此 MySQL 服务器 远程连接的时候出现如下错误: 问题分析 根据描述提示,在用Navicat配置远程连接Mysql数据库时遇…

【Node.js】写一个数据自动整理成表格的脚本

前言 企业项目进行数据埋点后,埋点事件名需要整理成Excel表格便于统计,目标是将下图左侧数据转化成下图右侧的Excel表格: 考虑到左侧埋点数据是随项目迭代增加的,埋点数据每增加一次我就要把数据一条一条的CtrlC/V复制粘贴至Ex…

春节要放假了,外贸人你准备好了吗?

一转眼,老外们的假期即将结束,而我们的春节假期即将开启。有人会想:工作一年了,好不容易春节放个假,我是不是应该好好休息了?对别人是!但是对于我们外贸人,并不是!很多外…

第十三届蓝桥杯C++B组省赛 J 题——砍竹子(AC)

1.砍竹子 1.题目描述 这天,小明在砍竹子,他面前有 nnn 棵竹子排成一排,一开始第 iii棵竹子的高度为 hihihi。 他觉得一棵一棵砍太慢了,决定使用魔法来砍竹子。 魔法可以对连续的一段相同高度的竹子使用,假设这一段…

数学基本算法

欧几里得算法 求两个数的最大公约数: /**** param a 整数* param b 整数* return 两个整数的最大公约数*/public static int gcd(int a,int b){return b0?a:gcd(b,a%b);} 扩展欧几里得 /*** * param a * param b (a,b)两个整数* param x * param y (x,y)…

LeNet5模型与全连接模型的差异

1 问题深度学习训练过程中,有很多的训练模型,我们组就在思考LeNet模型与之前运用的全连接模型在训练精度损失与验证精度损失上有什么差别?2 方法这是LeNet模型的主要代码,对数据进行两成卷积与两次池化之后再建立三成全连接即可。…

Oracle数据库的监控指标

一、Oracle 监控指标 Oracle数据库常见性能指标主要有:当前登录数、非阻塞锁数、当前死锁数、阻塞锁数、当前锁数、会话数等内容,如下图所示。 注意:以下是 Oracle 监控所需要的指标,具体根据需要监控哪些、超阈值而定。 1.1 新建主机群组 1.2 新建模板 1.3 创建主机 …

Qt 6.4.2在Windows上安装过程及简单验证

Qt是一个跨平台的C开发库,用来开发图形用户界面(Graphical User Interface, GUI)。它支持Windows、Linux、macOS、Android、iOS、QNX等平台,一个框架、一套代码库、任意平台部署。Qt有开源和商业两种许可。 Qt从5.15开始官方不再直接提供开源的exe…

H5——连连看小游戏实现思路及源码

部门要求推广新产品用连连看小游戏的方式, 设计那边UI还没有排期,先撸个功能demo,正好记录一下; 连连看都玩过,程序的关键在于判断连续点击的两张图片是否能够消除,两个图片消除的条件有两个: …

【3 - 特征工程】菜菜sklearn机器学习

课程地址:《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期:sklearn入门 & 决策树在sklearn中的实现第二期:随机森林在sklearn中的实现第三期:sklearn中的数据预处理和特征工程第四期:sklearn中的降维算法…

Blog Navigation

Blog Navigation Linux Kernel 0x01_LinuxKernel_内核的启动(一)之启动前准备[2022-7-5]0x02_LinuxKernel_内核的启动(二)SMP多核处理器启动过程分析 [TODO]0x21_LinuxKernel_内核活动(一)之系统调用 [20…

【OpenGL学习】OpenGL窗口创建

OpenGL窗口创建 本节介绍如何在利用配置好的GLFW和GLAD进行一个简单窗口的绘制,首先明白在OpenGL中进行图形绘制到窗口的整个流程: 初始化GLFW创建窗口window创建OpenGL上下文初始化Glad渲染循环结束绘制 初始化GLFW 然后我们从上面的流程逐步进行窗…

知微传感3D相机SDK开发文档一查找相机

知微传感3D相机SDK开发文档一查找相机 主要对知微传感3D相机的SDK文件做一个介绍,大家一个界面显示程序包含图像的获得,相机的查找和链接 查找相机,通过UDP广播形式查找局域网相机链接相机,通过IP地址链接局域网内的相机获取图片&…

如何提升计算机的运行速度-正确清理C盘的方法

本文是向大家介绍清理C盘的方法,它能够实现给系统盘瘦身,能够带来提升计算机运行速度价值。提升计算机的运行速度-清理C盘的方法1 利用Windows附带的磁盘清理工具鼠标右击【C盘】选择【属性】选择【磁盘清理】勾选需要清理的文件,点击【确定】…

2023 hgame --- week1 wp

文章目录Miscsign ine99p1ant_want_girlfriend神秘的海报Where am IWebClassic Childhood GameBecome A MemberGuess Who I AmShow Me Your BeautyCryptoRSABe Stream神秘的电话兔兔的车票Retest_your_IDAeasyasmencodeeasyenca_cup_of_teaPwntest_nciotHelp the uncle who can…