当前位置: 代码迷 >> C语言 >> 急死了还有二天要交大作业了,一个结点赋值却总是要出错!
  详细解决方案

急死了还有二天要交大作业了,一个结点赋值却总是要出错!

热度:166   发布时间:2006-04-04 22:33:00.0
急死了还有二天要交大作业了,一个结点赋值却总是要出错!
老师布置的大作业,一共有main.c, fileADT.c, fileADT.h三个文件组成),好不容易开通宵整出来了,编译也通过了,可是在"命令提示符"状态下一运行(book-unformatted和book-formatted是老师指定的):

main book-unformatted book-formatted

windows就提示main.exe遇到问题要关闭.
现在发现问题是在文件关闭时,要把头结点的值赋给行结点的值,就是下面这句出错:
linenodeptr = fileADT->line1;

二个结点的定义是这样的:
typedef struct fileADT
{
int size;
struct linenode * line1;
} FileADT;



typedef struct linenode
{
struct chnode * chhead;
struct linenode *nextline;
} LINENODE;

打开和关闭文件的函数如下:
int FileOpen(FileADT* fileADT, char* filename)
{
FILE *stream;
char readch;
LINENODE * linenodeptr;
CHNODE * chnodeptr = NULL;

stream = fopen( filename, "r" );
if( stream == NULL )
{
return -1;
}

fileADT = (FileADT*) malloc (sizeof(FileADT*));

//if (fileADT==NULL)
//{printf("Error!");
//return 0;
//}


linenodeptr =(LINENODE*) malloc( sizeof(LINENODE) );
if( linenodeptr != NULL )
{
linenodeptr->nextline = NULL;
linenodeptr->chhead = NULL;
fileADT->line1 = linenodeptr;
printf("%d", fileADT->line1);

}

while (fread( &readch, sizeof(char), 1, stream )>0 )
{
CHNODE * chnode;

chnode = (CHNODE *) malloc( sizeof(CHNODE) );

chnode->ch = readch;
chnode->nextch = NULL;

if( chnodeptr == NULL )
{
LINENODE * linenode;
linenode = (LINENODE *) malloc( sizeof(LINENODE) );

linenode->nextline = NULL;
linenode->chhead = chnode;
chnodeptr = chnode;

linenodeptr->nextline = linenode;
linenodeptr = linenode;
}
else
{
chnodeptr->nextch = chnode;
chnodeptr = chnode;
}
if( readch == '\n' )
{
chnodeptr = NULL;
}
}
fclose( stream );

return 0;

int FileClose(FileADT* fileADT, char* filename)
{
FILE *stream;
LINENODE* linenodeptr;
CHNODE * chnodeptr;

printf("%d", fileADT->line1);
linenodeptr = fileADT->line1;


stream = fopen( filename, "w" );
if( stream == NULL )
{
return -1;
}

while( linenodeptr != NULL )
{
chnodeptr = linenodeptr->chhead;
while( chnodeptr != NULL )
{
fwrite(&(chnodeptr->ch), sizeof(char), 1, stream );
chnodeptr = chnodeptr->nextch;
}
linenodeptr = linenodeptr->nextline;
}

fclose( stream );

linenodeptr = fileADT->line1;
while( linenodeptr->nextline !=NULL )
FileDeleteLine(linenodeptr, 1);
free(linenodeptr);

return 0;
}

main.c中如下调用:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "fileADT.h"

int main(int argc, char* argv[])
{

FileADT* fileADT=NULL;
char*string;
char*find;
char*replace;
char*filename;
int line, cutLine, pasterLine;


if (argc!=3)
{
printf ("Usage: nroffGold <input_file> <output_file>\n");
return EXIT_FAILURE;
}



FileOpen(fileADT, argv[1]);

FileClose(fileADT, argv[2]);

return 0;
}


急死了还有三天要交作业了,现在还不知道函数写得对不对.
哪位高人教我几招?感激不尽啊

搜索更多相关的解决方案: 结点  赋值  交大  作业  

----------------解决方案--------------------------------------------------------
  相关解决方案