簡體   English   中英

使用memcpy復制數據

[英]Copying data using memcpy

我正在為upclsf做一個clsf_ptr的memcpy

memcpy(&upclsf, &clsf_ptr, sizeof(struct classifier));

在使用gdb進行調試的時候,我檢查了upclsf的內存地址,當時我打印了up&upclsf

(gdb) p &upclsf
$1 = (struct classifier **) 0xbffff184

當我打印upclsf我得到了

(gdb) p upclsf
$2 = (struct classifier *) 0x2e312e31

這里的地址是我無法理解的,這里upclsf是結構分類器的一個實例

GDB不同意 - upclsf不是struct classifier ,它是一個指針。 請注意,這兩個答案有不同的類型。 第一個( &upclsf )是struct classifier ** ,第二個( upclsf )是struct classifier * 這是內存布局:

addr 0xbffff184 / upclsf: pointer to 0x2e312e31

addr 0x2e312e31 / *upclsf: (structure data)

您想將memcpy更改為:

memcpy(upclsf, &clsf_ptr, sizeof(struct classifier));

或者可能:

memcpy(upclsf, clsf_ptr, sizeof(struct classifier));

請注意, memcpy將大肆破壞數據,並且不是類型安全的! 因此,在使用它時必須格外小心,以確保您提供的類型是正確的。 我建議定義以下功能:

static inline void
classifier_copy(struct classifier *dest, struct classifier const *src)
{
    memcpy(dest, src, sizeof(*dest));
}

這將捕獲類型錯誤。 對於我復制一次或兩次以上的任何結構,我都會制作其中一個。

暫無
暫無

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

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