求将C语言源文件转换成目标文件的源代码,万分感谢!

这个目标文件是把C源文件编译成可执行文件过程中,生成的目标文件

第1个回答  2010-09-08
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
typedef struct pnode //个人记录结点类型
{
char name[8]; //姓名
char tel[16]; //电话号码
char addr[30]; //住址
}personnode;

char filename[20]; //存储通讯录名称数组
FILE *fp;

void creat() //初始输入记录
{
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
printf("\n请输入通讯录名:");
scanf("%s",filename);
printf("---------------------------------------------\n");
if((fp=fopen(filename,"w"))==NULL) //打开文件
{
printf("\n没有输入通讯录名,不能建立通讯录!");
exit(1);
}
fprintf(fp,"%-10s%-20s%-50s\n","姓名","电话号码","住址");
printf("\n请输入姓名,电话号码及住址(以空格隔开,以@结束)\n");
printf("---------------------------------------------\n");
scanf("%s",person->name);

while(strcmp(person->name,"@"))
{
scanf("%s%s",person->tel,person->addr);
fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
scanf("%s",person->name);

}
fclose(fp);
}

void output() //输出通讯录
{
personnode*person;
person=(personnode*)malloc(sizeof(personnode));
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n不能打开通讯录!");
exit(1);
}
printf("\n*********************************************\n");
printf("%24s\n","通讯录");
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->addr);
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->addr);

}
fclose(fp);
printf("*********************************************\n\n");
}

void append() //增加记录
{
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
if((fp=fopen(filename,"a"))==NULL)
{
printf("\n不能打开通讯录!");
exit(1);
}
printf("\n请输入要添加的姓名,电话号码及住址\n");
scanf("%s%s%s",person->name,person->tel,person->addr);
fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
fclose(fp);
}

void search() //查找记录
{
int k=0;
char namekey[8];
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
printf("\n请输入需要查找的姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n不能打开通讯录!");
exit(1);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->addr);
if(!strcmp(namekey,person->name))
{
printf("\n\n已查到,记录为:");
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
k=1;
}
}
if(!k) printf("\n\n对不起,通讯录中没有此人的记录。\n");
fclose(fp);
}

void dele() //删除记录
{
int k=0;
char m;
long offset1;
char namekey[8];
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
printf("\n请输入要删除记录的姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯录!");
exit(1);
}
while(!feof(fp))
{
offset1=ftell(fp); //P302(C语言),ftell(fp)的值是fp所指文件中位置指针的当前指向
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->addr);
if(!strcmp(namekey,person->name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,记录为:");
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
printf("\n确实要删除?y/n\n");
scanf("%s",&m);
if(m='y')
{
fseek(fp,offset1,SEEK_SET); //P302,fseek()函数的作用是使位置指针移动到所需的位置,(SEEK_SET即0,头文件)
fprintf(fp,"%-14s%-24s%-48s\n"," "," "," ");
printf("已经删除!\n");
}

}
else
{
printf("\n对不起,通讯录中没有此人的记录。\n");
}
fclose(fp);
}
main()
{
int m,flag=1;
creat();
while(flag)
{
printf("---------------------------------------------\n");
printf("\t\t1---添加\n");
printf("\t\t2---查找\n");
printf("\t\t3---删除\n");
printf("\t\t4---输出\n");
printf("\t\t5---退出\n");
printf("---------------------------------------------\n");
printf("\t请选择(1-6)\n");
scanf("%d",&m);
switch(m)
{
case 1: append();break;
case 2: search();break;
case 3: dele();break;
case 4: output();break;
case 5: exit(0);
}
}
return 0;
}

这是我以前做的一个实验,里面就是把数据输出到目标文件的,没有什么一段代码直接丢到里面去就直接能做好的,认真看下吧,尤其注意person=(personnode*)malloc(sizeof(personnode));
if((fp=fopen(filename,"a"))==NULL);这些语句
第2个回答  2010-09-09
这相当于编译器程序了。。。
我有一个简单的c编译器源码。不过对于c的功能支持的不完美。如果你需要我可以发给你本回答被提问者和网友采纳
第3个回答  2010-09-08
不是很明白你的意思,,,你是要一个C编译器的源代码?
相似回答