2

これは機能します:

struct client {
    string address;
    int toPay;
    int id;
};

int main() {
    struct client clients[10];
    ...
    file.read( (char*)&clients, sizeof (clients) );
}

私がやりたいのは、これらのことを関数内で行うことです。

しかし、構造体を関数に渡すにはどうすればよいでしょうか?

このように渡すと、読み取りが機能しません。

void newFunction ( struct client *clients_t) {
    ...
    file.read( (char*)&clients_t, sizeof (clients_t) );
}
4

5 に答える 5

2

&通話中の を削除しfile.read()ます。

そう:

file.read((char *)clients_t, sizeof(*clients_t) * 10 );

ポインター自体のアドレスを渡していますが、必要なのは構造体配列のアドレスであり、その正しいサイズを渡す必要があります。

ただし、readそれは技術的に有効ですが、stringオブジェクトを作成しないため、そのフラグメントは、その 1 つのプロセスの存続期間の早い段階で独自のオブジェクトへの参照を書き出したという異常なケースでのみ機能します。

学習経験として、バイナリ データの読み取りと書き込みは優れたアイデアです。

ただし、IRL は通常、DBMS を介する場合を除いて、まったくやりたくないでしょう。デバッグが難しく、バイトオーダーを公開することでアーキテクチャ固有になる可能性があります。代わりに、YAML、XML、または CSV を考えてください。

于 2012-11-15T18:36:53.257 に答える
1

関数内で構造体のオブジェクトを単純に作成してみませんか。それもそのように機能します。次に、作成したオブジェクトを使用して、その関数内の構造体のメンバーにアクセスできます。

于 2012-11-15T18:36:38.777 に答える
1

&clients_tポインタへのポインタです。 clients_t必要なポインターです。

void newFunction ( struct client *clients_t) {
    ...
    file.read( (char*)clients_t, sizeof (clients_t) );
}
于 2012-11-15T18:37:14.990 に答える
1

構造体は単なるオブジェクトなので、他のオブジェクトと同じように扱います。

void Foo(client& ClientObj)
{
   //anything written in here directly effects the client object you passed
}

オブジェクトのコピーのみを渡す場合は、参照渡しする必要があることに注意してください。

//in main
client CObj;
Foo(CObj);
于 2012-11-15T18:37:49.170 に答える