0

まず、これがすでに尋ねられて解決されている場合は本当に申し訳ありません.必要なものを提供するためにコードサンプルを検索して適応させるのに何年も費やしました...しかし残念ながら役に立ちませんでした. 基本的に、ある構造体の内容を別の構造体にコピーしようとしているだけです (これは他の場所で文書化されていますが、動作させることができません)。

スキャナは、バーコードを読み取るときに次の構造体を設定します。

struct barcode
{
    char *text;
    int length;
    int id;
    int min;
    int max;
};

これは次のようにインスタンス化されます。

static struct barcode code = {0};

同じタイプの別のものをインスタンス化します。

struct barcode *barcodeHolder;

これは、スキャンしたバーコードのコピーを保存するためのものです。これは、数字や段階 (終了、開始など) を示すバーコードなど、他のステップを示す他のコードがスキャンされるためです。構造体の内容をディスクに書き込みたい場合は、構造体の「コピー」を使用します。

ただし、char *text プロパティは、バーコードの値ではなく、常に「c」と等しくなります。

次のようにコピーします。

barcodeHolder = malloc(sizeof(code));
barcodeHolder->text = malloc(strlen(code->text) + 1);
strcpy(barcodeHolder->text, code->text);
barcodeHolder->id   = code->id;
barcodeHolder->length = code->length;
barcodeHolder->max = code->max;
barcodeHolder->min = code->min;

これは、同様のトピックに関する他の投稿から得たものです。

しかし、私は明らかに愚かなことをしており、構造体テキスト要素の私のコピーが実際に正しい値をコピーするように、誰かが提供できる助けを歓迎します。

ありがとうございました!

4

4 に答える 4

3

あなたcodeはポインターではありません

あなたはこれを必要とします:

barcodeHolder = malloc(sizeof(code));
barcodeHolder->text = malloc(strlen(code.text) + 1);
strcpy(barcodeHolder->text, code.text);
barcodeHolder->id = code.id;
barcodeHolder->length = code.length;
barcodeHolder->max = code.max;
barcodeHolder->min = code.min;
于 2013-09-19T15:38:09.430 に答える
0

または、より簡単に:

barcodeHolder = malloc(sizeof(code));
*barcodeHolder = code;
barcodeHolder->text = strdup(code.text);
于 2013-09-19T15:44:14.623 に答える
0

おそらく無関係ですが、例のコードが構造体へのポインターである場合、sizeof は間違っています。sizeof(*code) または sizeof(struct バーコード) である必要があります。– ショーン・ブライト 21時間前

@SeanBright 決して自分を C プログラマーと呼ぶことはありません。-ここで完全に保存しました!ありがとうございました。いいえ、「コード」は私を混乱させるプログラムのポインタではありません...そしておそらくどこにも行けなかった理由です。デモでそれができることを証明するために、それを機能させる必要がありました。進行する場合は、戻ってきて (うまくいけば!)、コードを再検討して、動作すべきではないのに動作する理由をよりよく理解します。ありがとうございました!!!

于 2013-09-20T15:59:14.913 に答える