二重リンクリストから印刷するときに、同じ文字列値を取得するのに算術値が異なるのはなぜですか

CharisAlex

したがって、DLLから印刷する場合、すべてのレコードについて、[姓]、[名]、[住所]、[居住地]のフィールドで同じ文字列値を取得します。これらのフィールドはすべて文字列値を保持します。印刷するノードごとに、顧客ID、住所番号、郵便番号、支出などの正しい算術値を取得します。これが私のメインです:

#include <stdio.h>
#include <stdlib.h>

#include "ClientList.h"

#define SIZE_T 5000
#define YES 1
#define NO 0

main(int argc, char *argv[]){
    FILE    *fp=NULL;
    unsigned long customerid;
    char    clname[SIZE_T];
    char    cfname[SIZE_T];
    char    Address[SIZE_T];
    unsigned int AddressNumber;
    char PlaceOfResidence[SIZE_T];
    unsigned int PostalCode;
    float Expenditure;

     ClientList *List = ClientList_create();

    fp=fopen(argv[1],"r");

    while(fscanf(fp,"%lu %s %s %s %d %s %u %f \n", &customerid, clname, cfname, Address, &AddressNumber, PlaceOfResidence, &PostalCode, &Expenditure) != EOF){
        //printf("+++ Just read: %lu %s %s %s %d %s %u %.02f \n",customerid, clname, cfname, Address, AddressNumber, PlaceOfResidence, PostalCode, Expenditure);
        ClientNode *Node = ClientNode_create(customerid, clname, cfname, Address, AddressNumber, PlaceOfResidence, PostalCode, Expenditure);
        ClientList_printNode(Node);
        ClientList_pushfront(List, Node);
}
    int K = size(List);
    unsigned long custid;
    char *name;
    printf("The size of the list is %d records \n",K);
    printf("Enter Customer ID you wish to search:\n");
    scanf("%lu",&custid);
    int M = ClientList_search(List, custid);
    if(M == YES)
        printf("YES\n");
    else
        printf("NO\n");
    Print_List(List);
    ClientList_destroy(List);
    fclose(fp);

    exit(0);
}

また、ここに私の挿入関数print_list関数があります。

void ClientList_pushfront(ClientList *list, ClientNode *node){
    node->next = list->head;
    node->previous = NULL;
    if(list->head != NULL){
        node->next = list->head;
        list->head->previous = node;
    }
    else{
        list->tail = node;
    }
    list->head = node;
    list->size ++;
}

void Print_List(ClientList *list)
{
    ClientNode *current = malloc(sizeof(ClientNode));
    current = list->head;
    while(current)
    {
        printf("Customer ID: %lu | Last Name: %s | First Name: %s | Address: %s | Number: %u | Place of Residence: %s | Postal Code: %d | Expenditure: %.02f |\n", current->customerid, current->LastName, current->FirstName, current->Address, current->AddressNumber, current->PlaceOfResidence, current->PostalCode, current->Expenditure);
        current = current->next;
    }   
}

私のCreate_Node関数:

ClientNode *ClientNode_create(unsigned long customerid, char *LastName, char *FirstName, char *Address, unsigned int AddressNumber, char *PlaceOfResidence, unsigned int PostalCode, float Expenditure){
    ClientNode *client = malloc(sizeof(ClientNode));
    client->Expenditure = Expenditure;
    client->customerid = customerid;
    client->FirstName = FirstName;
    client->LastName = LastName;
    client->Address = Address;
    client->AddressNumber = AddressNumber;
    client->PostalCode = PostalCode;
    client->PlaceOfResidence = PlaceOfResidence;
    client->next = NULL;
    client->previous = NULL;
    return client;
}

そして、これは私が得る出力の一部です:

Customer ID: 14260622 | Last Name: Pickett | First Name: Norma | Address: Todd | Number: 333 | Place of Residence: Robinwood | Postal Code: 23209 | Expenditure: 1030.00 |
Customer ID: 18723325 | Last Name: Pickett | First Name: Norma | Address: Todd | Number: 264 | Place of Residence: Robinwood | Postal Code: 42473 | Expenditure: 924.00 |
Customer ID: 16243937 | Last Name: Pickett | First Name: Norma | Address: Todd | Number: 350 | Place of Residence: Robinwood | Postal Code: 34297 | Expenditure: 402.00 |
Customer ID: 16451445 | Last Name: Pickett | First Name: Norma | Address: Todd | Number: 253 | Place of Residence: Robinwood | Postal Code: 14361 | Expenditure: 449.00 |
リスター氏

あなたではClientNode_create機能、あなたはchar型のポインタではなく、コピーした値をchar型のポインタに。これは、すべての構造体のテキストフィールドがすべてmain。の同じcharバッファを指すことを意味します

一つの解決策は、使用することですmallocstrcpy

client->FirstName = malloc(strlen(FirstName)+1);
strcpy(client->FirstName, FirstName));

すべての文字列に対して。または、これを実行する関数を記述します。多くのライブラリには、strdupまさにこれを実行する関数も含まれています
そしてfree、後で思い出に忘れないでください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

算術演算を行うときにawkが数値を文字列に変換するのはなぜですか?

分類Dev

二重リンクリストが以前のリンクを削除するのはなぜですか?

分類Dev

シェルスクリプトでこの変数を定義するときに二重引用符が必要なのはなぜですか?

分類Dev

削除するノードが与えられたときに、単一リンクリストと二重リンクリストの両方でO(1)を削除しないのはなぜですか?

分類Dev

二重リンクリストの最初の値のみを出力し、プログラムがクラッシュするのはなぜですか

分類Dev

文字列から解析するときにフロート値が正しくない、二重に機能する、なぜですか?

分類Dev

文字列から解析するときにフロート値が正しくない、二重に機能する、なぜですか?

分類Dev

ArrayListから取得した同じ値が異なる値に変更されるのはなぜですか?

分類Dev

この二重否定クエリが肯定クエリと異なるのはなぜですか?

分類Dev

Dequeの代わりにLRUキャッシュに二重リンクリストとHashMapを使用するのはなぜですか?

分類Dev

異なるオブジェクトに同じ値が割り当てられるのはなぜですか?

分類Dev

このAJAXリクエストから二重の応答が返されるのはなぜですか?

分類Dev

二重分割せずに、解析されていない文字列のリストから辞書内包表記を構築することは可能ですか?

分類Dev

同じレコードをクエリするときにActiveRecordが異なるrubyオブジェクトを作成するのはなぜですか?

分類Dev

このリンクからXMLドキュメントを取得できないのはなぜですか。また、文字列内ですべてのタグブラケットを引用符にすることができるのはなぜですか。

分類Dev

「破損した二重リンクリスト」エラーが発生するのはなぜですか?

分類Dev

値が異なる同じクラスオブジェクトがデータソースとして渡されたときに、ビューが再レンダリングされないのはなぜですか

分類Dev

値が異なる同じクラスオブジェクトがデータソースとして渡されたときに、ビューが再レンダリングされないのはなぜですか

分類Dev

GetDCが同じオブジェクトに対して異なる値を返すのはなぜですか?

分類Dev

二重にリンクされたリストイテレータがnullを出力するのはなぜですか?

分類Dev

すべてのリストが同じ値を取得するのはなぜですか-python?

分類Dev

インタープリター付きのLLVMRunFunctionが異なる関数に対して同じ値を返すのはなぜですか?

分類Dev

Xcodeのinfo.plistから二重引用符なしで文字列値を取得するにはどうすればよいですか?

分類Dev

値が同じであっても、二重中括弧で囲まれた子によってReact.memoコンポーネントが再レンダリングされるのはなぜですか?

分類Dev

なぜOracleSQLでは、条件が大きく異なる同じ列に対して2つの異なる値を使用してクエリを実行するのにかかる時間が

分類Dev

before_actionを使用するときに二重レンダリングがないのはなぜですか?

分類Dev

同じディレクトリまたは親ディレクトリにいるときに、「require」の動作が異なるのはなぜですか?

分類Dev

Math.pow()によってInteger.MIN_VALUEをデクリメントすると、同じ値が返されるのはなぜですか?

分類Dev

同じ値の異なる変数が異なるオブジェクトを指すようにすることはできますか?

Related 関連記事

  1. 1

    算術演算を行うときにawkが数値を文字列に変換するのはなぜですか?

  2. 2

    二重リンクリストが以前のリンクを削除するのはなぜですか?

  3. 3

    シェルスクリプトでこの変数を定義するときに二重引用符が必要なのはなぜですか?

  4. 4

    削除するノードが与えられたときに、単一リンクリストと二重リンクリストの両方でO(1)を削除しないのはなぜですか?

  5. 5

    二重リンクリストの最初の値のみを出力し、プログラムがクラッシュするのはなぜですか

  6. 6

    文字列から解析するときにフロート値が正しくない、二重に機能する、なぜですか?

  7. 7

    文字列から解析するときにフロート値が正しくない、二重に機能する、なぜですか?

  8. 8

    ArrayListから取得した同じ値が異なる値に変更されるのはなぜですか?

  9. 9

    この二重否定クエリが肯定クエリと異なるのはなぜですか?

  10. 10

    Dequeの代わりにLRUキャッシュに二重リンクリストとHashMapを使用するのはなぜですか?

  11. 11

    異なるオブジェクトに同じ値が割り当てられるのはなぜですか?

  12. 12

    このAJAXリクエストから二重の応答が返されるのはなぜですか?

  13. 13

    二重分割せずに、解析されていない文字列のリストから辞書内包表記を構築することは可能ですか?

  14. 14

    同じレコードをクエリするときにActiveRecordが異なるrubyオブジェクトを作成するのはなぜですか?

  15. 15

    このリンクからXMLドキュメントを取得できないのはなぜですか。また、文字列内ですべてのタグブラケットを引用符にすることができるのはなぜですか。

  16. 16

    「破損した二重リンクリスト」エラーが発生するのはなぜですか?

  17. 17

    値が異なる同じクラスオブジェクトがデータソースとして渡されたときに、ビューが再レンダリングされないのはなぜですか

  18. 18

    値が異なる同じクラスオブジェクトがデータソースとして渡されたときに、ビューが再レンダリングされないのはなぜですか

  19. 19

    GetDCが同じオブジェクトに対して異なる値を返すのはなぜですか?

  20. 20

    二重にリンクされたリストイテレータがnullを出力するのはなぜですか?

  21. 21

    すべてのリストが同じ値を取得するのはなぜですか-python?

  22. 22

    インタープリター付きのLLVMRunFunctionが異なる関数に対して同じ値を返すのはなぜですか?

  23. 23

    Xcodeのinfo.plistから二重引用符なしで文字列値を取得するにはどうすればよいですか?

  24. 24

    値が同じであっても、二重中括弧で囲まれた子によってReact.memoコンポーネントが再レンダリングされるのはなぜですか?

  25. 25

    なぜOracleSQLでは、条件が大きく異なる同じ列に対して2つの異なる値を使用してクエリを実行するのにかかる時間が

  26. 26

    before_actionを使用するときに二重レンダリングがないのはなぜですか?

  27. 27

    同じディレクトリまたは親ディレクトリにいるときに、「require」の動作が異なるのはなぜですか?

  28. 28

    Math.pow()によってInteger.MIN_VALUEをデクリメントすると、同じ値が返されるのはなぜですか?

  29. 29

    同じ値の異なる変数が異なるオブジェクトを指すようにすることはできますか?

ホットタグ

アーカイブ