我目前正在编写一个程序,该程序逐行读取文件,并将每一行中包含的数据存储在链接列表中。我唯一的问题是,链表中的每个节点都被设置为文件最后一行中包含的数据。有人可以帮我吗?我的代码如下所示。
void calcFile( char sourceFile[] )
{
int valid;
FILE* f;
int done;
char buff[12];
LinkedList* list = NULL;
list = (LinkedList*)malloc(sizeof(LinkedList));
done = 1;
f = fopen( sourceFile, "rb" );
if (f != NULL)
{
do
{
if (fgets(buff, 12, f) != NULL)
{
char* storageArray[2];
valid = lineCalc( buff, storageArray );
if (valid == 1)
{
LinkedListNode* newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode));
newNode->command = storageArray[0];
newNode->value = storageArray[1];
newNode->next = list->head;
list->head = newNode;
}
}
else
{
done = 0;
}
}
while (done != 0);
if (ferror( f ) != 0)
{
printf("\n Error - the source file could not be read \n\n");
}
fclose( f );
}
else
{
printf("\n Error - the file could not be opened \n\n");
}
list->head = reverseLinkedList( list->head );
linkedListCalc( list->head );
freeLinkedList( list->head );
free( list );
}
答案 0 :(得分:0)
因为您尚未发布lineCalc()
,所以不能确定。但我认为您有类似以下的代码:
int lineCalc(char* buf, char** storage)
{
if (strlen(buf) < 6)
return -1;
storage[0] = buf[0];
storage[1] = buf[5];
return 0;
}
如果您有类似的问题,这将是您的问题。因为storage
直接指向buf
,所以每次阅读新内容时,所有节点都将指向相似的数据。如果您有这样的事情,请为每个storage
索引分配内存,并将数据从buf
复制到其中。