#define N 200 //假设每个文本有200行(可更改) #define M 180 //假设每行有180个字符(可更改)
int main() {
FILE *fp1,*fp2;
//定义两个文件指针指向A、B两个文本
char filename1[20],filename2[20];
//输入两个文本的文件名
printf(\"输入要被包含进去的文本文件名:\");
scanf(\"%s\
printf(\"输入将%s文本包含的文件名:\
scanf(\"%s\
int ch[2*N*M];
//定义一个整
型数组存储文本A和B中的内容(因为文本中可能包含中文等其他字符,char类型不够存储Unicode编码的字符)
if((fp1=fopen(filename1,\"r\"))==NULL)
//以只读方式打开文本filename1 {
printf(\"打开文件%s失败,程序自动退出\\n\ return 0; }
if((fp2=fopen(filename2,\"r\"))==NULL) //以只读方式打开文本A {
printf(\"打开文件%s失败,程序自动退出\\n\ return 0; }
char p[20];
sprintf(p,\"#include\\\"%s\\\"\ //将#include //定义一个字符串,方便在文本中查找 int i=0; while((ch[i]=fgetc(fp2))!=EOF) //开始读文本B中的内容到数组中 { if(ch[i]=='#') //假如遇到'#'就开始判断其后面的内容是否和p一致 { int j=0; i++; while((ch[i]=fgetc(fp2))==p[j+1]&&j { i++; j++; } if(j==num-1) //假如'#'后的内容与p完 全一致,即文本B中包含有\"#include { i-=num; //i减num是因为将读到数组中的\"#include i++; } } else //假如'#'后面的内容并不是include...则 需将文件指针定位到'#'后的字符位置继续读入,并继续判断 { i=i-j; fseek(fp2,-j-1,SEEK_CUR); } } else { i++; //执行完if语句的内容,继续读文本B中的内容 } } int n=i; //标记i的大小 //关闭文本A和B fclose(fp1); fclose(fp2); //现在以'w'的方式打开文本B,然后将数组中的内容写到文本B中 if((fp2=fopen(filename2,\"w\"))==NULL) { printf(\"打开文件失败,程序自动退出\\n\"); return 0; } for(i=0;i printf(\"\\n\"); fclose(fp2); return 0; } 因篇幅问题不能全部显示,请点此查看更多更全内容