0

Fprintf を SavePacket 関数に追加しましたが、outpackets 関数のように pos->destination を認識しません。コードを追加して、Link-List に保存されたデータと FprintF のデータをファイルに取り込むにはどうすればよいですか? ?

void outputPackets(node **head)
{


/*********************************************************
* Copy Node pointer so as not to overwrite the pHead     *
* pointer                                                *
**********************************************************/
node *pos = *head;

/*********************************************************
* Walk the list by following the next pointer            *
**********************************************************/
while(pos != NULL) {
    printf("Source: %i Destination: %i Type: %i Port: %i \n", pos->Source, pos->Destination, pos->Type, pos->Port, pos->next);
    pos = pos->next ;
}
printf("End of List\n\n");
}



void push(node **head, node **aPacket)
{
/*********************************************************
* Add the cat to the head of the list (*aCat) allows the *
* dereferencing of the pointer to a pointer              *
**********************************************************/
(*aPacket)->next = *head;
*head = *aPacket;
}

node *pop(node **head)
{
/*********************************************************
* Walk the link list to the last item keeping track of   *
* the previous. when you get to the end move the end     *
* and spit out the last Cat in the list                  *
**********************************************************/
node *curr = *head;
node *pos = NULL;
if (curr == NULL)
{
    return NULL;
} else {
    while (curr->next != NULL)
    {
        pos = curr;
        curr = curr->next;
    }
    if (pos != NULL) // If there are more cats move the reference
    {
        pos->next = NULL;
    } else {         // No Cats left then set the header to NULL (Empty list)
        *head = NULL;
    }
}
return curr;

/ * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** パケットコード保存機能 /** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** *

void SavePacket(){

FILE *inFile ;
char inFileName[10] = { '\0' } ;

printf("Input file name : ") ;
scanf("%s", inFileName) ;

unsigned long fileLen;

//Open file
inFile = fopen(inFileName, "w+");
if (!inFile)
{
fprintf(stderr, "Unable to open file %s", &inFile);
exit(0);

 }

 fprintf("Source: %i Destination: %i Type: %i Port: %i \n", pos->Source, pos->Destination, pos->Type, pos->Port, pos->next);



}
4

1 に答える 1

1

まず、 との関数シグネチャを確認する必要がprintfありfprintfます。あなたのprintfインoutputPacketsはよかったです。ただし、fprintf署名は次のとおりです。

int fprintf(FILE* stream, const char* format, ...);

最初の引数はFILE*. ただし、次のように関数を呼び出しました。

fprintf("Source: %i Destination: %i Type: %i Port: %i \n", pos->Source, pos->Destination, pos->Type, pos->Port, pos->next);

呼び出しでは、最初の引数はフォーマット文字列ですが、FILE*. そのため、期待した結果が得られません。

さらに、 と の両方の呼び出しprintffprintf、最後に指定した値pos->nextは役に立たず、削除できます。

編集:正確には、その行は

fprintf(inFile, "Source: %i Destination: %i Type: %i Port: %i \n", pos->Source, pos->Destination, pos->Type, pos->Port);
于 2013-05-03T12:59:09.847 に答える