簡體   English   中英

使用char指針復制C Struct

[英]Copy C Struct with char pointer

首先,如果對此問題已經得到解決,我真的感到很抱歉-我花了很長時間搜索並嘗試改編代碼示例以提供我所需的信息……但可惜沒有用。 本質上,我只是試圖將一個結構的內容復制到另一個結構(在其他地方對此進行了說明,但我無法使其正常工作)。

掃描器在讀取條形碼時會填充以下結構:

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;

這是我從其他類似主題的帖子中得到的。

但是,我顯然做錯了一些愚蠢的事情,並且歡迎任何人可能提供的任何幫助,以便我的struct text元素副本確實獲得了正確的值復制。

謝謝!

您的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;

我不認為您的代碼確實是:

static struct barcode code = {0};
[..]
strcpy(barcodeHolder->text, code->text);

因為最后一條語句會產生編譯錯誤-因為code不是指針,所以您必須在code.text使用code.text (而不是code->text )。

假設您實際上正在使用類似

struct barcode *code = ...;

您使用上面的代碼sizeof分配了struct code字節,這對於您的結構是不夠的。

因此,像這樣復制它:

barcodeHolder = malloc(sizeof(struct barcode));
// alternative: ... = malloc(sizeof(*code));

*barcodeHolder = *code;
barcodeHolder->text = malloc(strlen(code->text) + 1);
strcpy(barcodeHolder->text, code->text);

或者,更簡單地說:

barcodeHolder = malloc(sizeof(code));
*barcodeHolder = code;
barcodeHolder->text = strdup(code.text);

可能不相關,但是如果示例中的代碼是指向結構的指針,則您的sizeof是錯誤的。 它應該是sizeof(* code)或sizeof(struct條碼)。 –肖恩·布萊特21小時前

@SeanBright我絕對不會稱自己為C程序員-永遠! -所以您完全在這里保存了! 謝謝。 不,“代碼”也不是程序中的指針,這也讓我感到困惑……這可能就是為什么我無法到達任何地方的原因。 我只需要使它工作即可證明我們可以進行演示。 如果進展順利,我將返回(希望如此!)並重新訪問代碼以更好地理解為什么它在可能不應該起作用的情況下仍然起作用。 再次感謝你!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM