C编程-从文件读取数据并将其存储在链接列表中

时间:2018-10-02 10:40:07

标签: c

我目前正在编写一个程序,该程序逐行读取文件,并将每一行中包含的数据存储在链接列表中。我唯一的问题是,链表中的每个节点都被设置为文件最后一行中包含的数据。有人可以帮我吗?我的代码如下所示。

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 );
 }

1 个答案:

答案 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复制到其中。