首页 > 其他分享 >错题集

错题集

时间:2022-12-29 20:44:50浏览次数:53  
标签:fp ++ lp2 lp1 char 错题 FileSize

char和int比较

来源于南邮CTF whyvm1的数据比较,第一次看到就很疑惑

记录一次字符串过滤

下面我有几个操作,就是数据处理完后,不直接结束当前循环,而是从头再来判断一次

其实就怕数据监测的遗漏

...

比如你最后修改了某个内容,让指针移到新的节点,但是当前循环结束的时候也需要移动指针节点

所以就会导致一次多余的移动,同时你自己又不能少移动

所以你就不结束当前循环直接跳转到判断那里,再判断一次

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int ReadFileSize(char* filename);

int main()
{
	FILE* fp = 0;
	char fpname[] = "F:\\src.txt";
	int FileSize = 0;
	char* lp1 = 0;
	char* lp2 = 0;
	int i = 0,j=0;

	FileSize = ReadFileSize(fpname);
	fp = fopen(fpname, "rb+");
	if (fp == 0)
	{
		printf("wrong open\n");
		return -1;
	}
	//每一次删除0x23个字节
	//开始标志是d,结束标志是;

	lp1 = (char*)malloc(FileSize + 0x10);
	lp2 = (char*)malloc(FileSize + 0x10);
	if (lp1 == 0 || lp2==0)
	{
		printf("wrong malloc\n");
		fclose(fp);
		return 0;
	}
	memset(lp1, 0, FileSize + 0x10);
	memset(lp2, 0, FileSize + 0x10);
	fread(lp1, FileSize, 1,fp);
	fclose(fp);

	//删除多余项
	for (i = 0; i < FileSize;i++ )
	{

	check_again:
		if(!memcmp(&lp1[i],"dword",5))
		{
			while (1)
			{
				if (lp1[i] == 0xA)
				{
					lp1[i] = 0;
					i++;
					break;
				}
				lp1[i] = 0;
				i++;
			}
			goto check_again;
		}
	
		if (!memcmp(&lp1[i], "byte_6941", 9))
		{
			memset(&lp1[i], 0, 9);
			memcpy(&lp1[i], "a[0x", 4);
			lp1[i + 4 ] = lp1[i + 9];
			lp1[i + 5] =  lp1[i + 10];
			lp1[i + 6] = ']';
			lp1[i + 9] = 0;
			lp1[i + 10]=0;
			
		}
		if (!memcmp(&lp1[i], "input", 5))
		{
			memset(&lp1[i], 0, 5);
			memcpy(&lp1[i], "a[0]", 4);
			goto check_again;
		}
		if (lp1[i] == '+')
		{
			lp1[i] = '-';
			i++;
			goto check_again;
		}
		if (lp1[i] == '-')
		{
			lp1[i] = '+';
			i++;
			goto check_again;
		}
	}
	
	for (i = 0; i < FileSize; i++)
	{
		if (lp1[i]!=0)
		{
			lp2[j] = lp1[i];
			j++;
		}
	}
	//逆序读取
	//最后lp2以0xA结束
	//printf("%d %X", j, lp2[j]);
	j--;
	for (; j >= 0; j--)
	{
		if (lp2[j] == 0xD || lp2[j] == 0xA)
		{
			lp2[j] = 0;
		}
		if (!memcmp(&lp2[j], "--", 2))
		{
			printf("%s\n", &lp2[j]);

		}
		if (!memcmp(&lp2[j], "++", 2))
		{
			printf("%s\n", &lp2[j]);

		}
		if (!memcmp(&lp2[j], "a[", 2))
		{
			printf("%s\n", &lp2[j]);
		}
	}

	 
}
int ReadFileSize(char* filename)
{
	int size = 0;
	FILE* fp = fopen(filename, "r");
	if (!fp)
	{
		printf("wrong open\n");
		return -1;
	}
	fseek(fp, 0L, SEEK_END);
	size = ftell(fp);
	fclose(fp);

	return size;
}

标签:fp,++,lp2,lp1,char,错题,FileSize
From: https://www.cnblogs.com/re4mile/p/17013497.html

相关文章

  • CSS错题小结
    一.列出所知的CSS选择器1.基本选择器:id选择器,类选择器,标签选择器,通配符选择器(*)复合选择器:后代选择器(.box1.box2),并集选择器(.box1,.box2),交集选择器(.box1.bo......
  • C语言二级错题积累(4)
    在栈中,栈项指针的动态变化决定栈中元素的个数。详细设计的人物是为软件结构体中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。扇......
  • C语言二级错题积累(5)
    常用的连续存储管理技术有固定分区存储管理和可变分区存储管理。程序流程图中带有箭头的线段表示的是控制流。若二叉树没有叶子结点,则为空二叉树。带链栈的栈底指针是随栈的......
  • 关于信息学考中的错题
    信息学考做到这样一个题(这里简化了亿下):已知当一个月连续五天气温低于10度就说从这五天的第一天入冬了。请补全以下程序#下面这行是一行伪代码temp=[(input....)]......
  • 我的错题本
    受zhangtingxi的启发,写了这个错题本,来记录自己的易错点。一:比赛相关检查文件名,文件流。(2021CSP-S)尽量使用万能头。(2020CSP-S)最后一定要把所有样例过一遍,包括小样例......
  • 错题记录:单片机4个数码管分秒表 关于定义数组的细节问题
    废话不多说先上代码:查看代码 //定时器0分,秒的计时计数voidtimer0()interrupt1{ staticunsignedintspeed,count=0; TH0=0XEE; TL0=0X00; count++; if(s......
  • 错题本
    postedon2021-10-0311:22:24|under学术|source哇,这个SB怎么这么喜欢挂分。不行,要记录一下是怎么挂分的,防止CSP-J/S挂分。<=年少无知,应该是防止丢掉提高一等......
  • 操作系统复习错题集合
    操作系统复习错题集合​ 主要记一下这个写操作,是增删目录中的目录项​ 文件有逻辑结构和物理结构,逻辑结构有流式和记录式,物理结构有顺序式、索引式、链接式UNIX题目......
  • 错题笔记:int a=b=1这样定义为什么是错误的
    C语言中定义同一类型的多个变量必须以逗号分隔。如:inta,b,c;=在C语言中是赋值运算符,等号左边的变量,必须是已以定义好的变量才可以。inta=b=1;中,若b已经定义,则......
  • 一道C语言改错题
    下午,在上班,读者发来一道题目,问我怎么做。我大概瞄了一眼,看题目也不难。就先让他自己上网查下。过了一会,他说查不到,问了群里,大家也不太会。好吧,起码这位读者自己思考过,也......