最近事比较多,没来得及跟新,对不住大家啦!今天,给大家带来一个稍稍有点“黑”的气息的小程序,算作给大家的补偿吧!好啦,废话不多说 直接开干!!!
通常我们学文件这边的时候,总是噼里啪啦的讲那么多函数啊,读写方式啊,神马文件指针啊,神马打开要关闭啊,哎,好无奈啊!书上都写了,我就不耽误大家了,来点有意思的“小黑”,学编程的嘛,大家都有一颗成为黑客的心,我懂!曾几何时,我也这样痴狂过…..打住,差点梦游了!好了,简单说下今天的程序实现的功能吧!
首先:消息框大家都看过吧!就是下面这货
哈哈,HelloWorld你们熟悉吧。好啦,我们这次的任务就是把“HelloWorld”给改成“C++技术网”,当然也可以改成你心仪女生的名字呦。
接着讲一点文件打开的方式的相关内容,为了是让你更爽的自己写出程序来嘛!在上一讲里我们学过常用的打开方式有:r(read) w(write) b(binary) t(text),好了 这就够了其他很多什么追加啊,什么覆盖啊噼里啪啦一大堆,不用管,需要啥就学啥。 打开方式嘛,就是说你想要通过这次打开实现什么功能。是从里面读取数据呢,还是往里边写入数据呢。这是r w的作用。那么b t又是啥子用呢?这个是windows下的区别,在linux下没这种区别,主要是windows对于换行的处理。不用知道这些琐碎的知识,你只要知道以b读出来的就是最真实的数据。
好啦,上面的讲完了,直接上程序吧。
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
char* memstr(char* full_data, int full_data_len, char* substr);
int main(int argc,char *argv[])
{
if(argc==2)
{
printf("程序使用参数如下:\n");
printf("demo.exe 恶搞文件路径 被替换文本 替换文本");
return 0;
}
FILE *fp=fopen(argv[1],"rb+");
char buf_dst[512]={0};
char *search_for=argv[2];
char *buf_src=argv[3];
int nCount=0;
int i=0,temp=0;
char *p=NULL;
if(!fp)
{
MessageBox(NULL,"怎么搞得!都没目标文件","哎",MB_OK|MB_ICONERROR );
return 0;
}
while(fread(buf_dst,1,512,fp)!= 0)
{
if(p = memstr(buf_dst,512,search_for))
{
MessageBox(NULL,"找到了,恶搞成功","哈哈",0);
fseek(fp,p-buf_dst-512,SEEK_CUR);
fwrite(buf_src,strlen(buf_src),1,fp);
fputc('\0',fp);
fseek(fp,0,SEEK_END);
break;
}
}
fclose(fp);
return 0;
}
char* memstr(char* full_data, int full_data_len, char* substr)
{
int sublen = strlen(substr);
int i;
char* cur = full_data;
int last_possible = full_data_len - sublen + 1;
if (full_data == NULL || full_data_len <= 0 || substr == NULL) {
return NULL;
}
if (*substr == '\0') {
return NULL;
}
for (i = 0; i < last_possible; i++) {
if (*cur == *substr) {
//assert(full_data_len - i >= sublen);
if (memcmp(cur, substr, sublen) == 0) {
//found
return cur;
}
}
cur++;
}
return NULL;
}
结合着程序给大家讲解下吧。这个程序要从命令行运行才行。agrc是你从命令行输入的参数的总数,agrv是一个指针数组,每个元素指向你输入的字符串。
然后就调用fopen函数打开被蹂躏的文件,接着获取你想替换掉的字符串,用search_for指针来接受,再然后就是获取你想用什么字符窜去替换(比如你女神的名字)。
然后程序就开始查找你所指定的字符串啦,调用memstr这个函数,如果找到了就给
替换掉,找不到就算啦!恩,其实挺简单的,大家看看运行效果!
被蹂躏前:
蹂躏过程:
被蹂躏后:
好玩吧 自己写一遍程序吧,写完就会拉。有点“黑”哈 。