头文件和有什么区别???
我在VC中写标准C++的程序,用ifstream和FILE对文件进行操作
程序无法正常运行,头文件我改了又改,不是函数退出时候出错
就是函数运行时出错,实在不懂,请高手指教
下面是我的一部分关键代码:(估计问题就在这儿,编译没有问题)
#include <fstream.h>
#include <string.h>
#include <stdio.h>
using namespace std;
int AddKey(char* filename,char* fieldname,char* keyname,char* value)
{
char* keyvalue,*buffer,*field,*key,*tail;
bool findfield(false),findkey(false);
long station(0);
FILE *outfile,*output; // outfile指向要修改的文件,output指向临时文件;
keyvalue=new char[255];
tail=new char[255];
buffer=new char[8];
memset(buffer,0,sizeof(buffer));
field=new char[255];
key=new char[255];
ifstream input;
input.open(filename,ios::in|ios::binary);
if(!input.good())
{
MessageBox(NULL,"错误三","打开指定文件错误",MB_OK);
return 3; //如果错误,返回"error3"
}
input.seekg(0,ios::beg);
while( !input.eof() && *key!=*keyname) //遍历全文
{ //1
input.read(buffer,1);
//string buff(buffer);
//string e=buff.substr(0,1);
if(buffer[0]=='[')
{//2
//field=buffer;
input.getline(field,255,']');
if (*field==*fieldname)
{ //3
findfield=true;
input.getline(tail,255,'\n');
station=input.tellg(); //获得输入起始点;
/*while(!input.eof() && *key!=*keyname)
{//4
input.getline(key,255,'=');
if(key[0]=='[') //域内搜寻完毕,没有查到结果。
break;
if(*key==*keyname)
{
findkey=true;
return 4; //意味所要添加的Key已存在
}
input.getline(tail,255,'\n');
}//4*/
char tempfile[sizeof(*filename)]; // memset(tempfile,0,sizeof(*filename));
//tempfile=filename;
int i=strlen(filename);
strncpy(tempfile,filename,strlen(filename));
strcat(tempfile,".asc");
//tempfile+=".asc";
//strncpy( keyvalue, keyvalue1,255 );
//char* tem=new char[tempfile.length()];
//sprintf(tem,"%s",tempfile);
outfile=fopen(filename,"r+");
output=fopen(tempfile,"w+");
int result=fseek(outfile,0,SEEK_END);
int length=ftell(outfile);
result=fseek(outfile,station,SEEK_SET);
int letter(0),numread(0),numwrite(0);
while(ftell(outfile<length) //读入剩余部分到临时文件;
{
numread = fread( buffer, sizeof(char), strlen(buffer), outfile);
numwrite= fwrite( buffer, sizeof(char), strlen(buffer), output);
}
result=fseek(outfile,station,SEEK_SET); //插入
numwrite= fwrite( keyname, sizeof(char), strlen(keyname), outfile);
numwrite= fwrite( "=", sizeof(char), 1, outfile);
numwrite= fwrite( value, sizeof(char), strlen(value), outfile);
numwrite=fwrite("\n", sizeof( char ), 1, outfile);
result=fseek(output,0,SEEK_SET);
while(!feof(output)) //从临时文件读回到要修改的文件;
{
numread = fread( buffer, sizeof( char ), strlen(buffer), output);
numwrite= fwrite( buffer, sizeof( char ), numread, outfile);
}
break; //跳出异常;
}//3
}//2
else
input.getline(tail,255,'\n');
}//1
delete keyvalue;
//delete keyvalue1;
//delete keyvalue2;
delete buffer;
delete field;
delete key;
delete tail;
if(findfield==false)
{
//AfxMessageBox("Can't find the field!");
return 1;
}
fclose(output);
input.close();
return 0;
}