第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

您如何比較C中相等的結(jié)構(gòu)?

您如何比較C中相等的結(jié)構(gòu)?

C
慕村225694 2019-10-06 16:18:31
如何在標(biāo)準(zhǔn)C中比較兩個(gè)結(jié)構(gòu)實(shí)例的相等性?
查看完整描述

4 回答

?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

C沒有提供語言工具來執(zhí)行此操作-您必須自己做,并逐個(gè)成員比較每個(gè)結(jié)構(gòu)。


查看完整回答
反對 回復(fù) 2019-10-06
?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊

您可能會想使用memcmp(&a, &b, sizeof(struct foo)),但可能并非在所有情況下都可以使用。編譯器可以向結(jié)構(gòu)中添加對齊緩沖區(qū)空間,并且不能保證在緩沖區(qū)空間中位于內(nèi)存位置的值是任何特定值。

但是,如果使用callocmemset結(jié)構(gòu)的使用之前的全尺寸,你可以做一個(gè)用的比較memcmp(如果您的結(jié)構(gòu)中包含指針,它只會匹配,如果指針指向的地址是相同的)。


查看完整回答
反對 回復(fù) 2019-10-06
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

由于結(jié)構(gòu)中字段之間可能存在隨機(jī)填充字符,因此無法使用memcmp比較結(jié)構(gòu)是否相等。


  // bad

  memcmp(&struct1, &struct2, sizeof(struct1));

上面對于這樣的結(jié)構(gòu)將失?。?/p>


typedef struct Foo {

  char a;

  /* padding */

  double d;

  /* padding */

  char e;

  /* padding */

  int f;

} Foo ;

為了安全起見,您必須使用逐成員比較。


查看完整回答
反對 回復(fù) 2019-10-06
?
至尊寶的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

在一般情況下,必須編寫顯式比較函數(shù)。

在以下情況下可以使用memcmp

  • 這些結(jié)構(gòu)不包含可能是的浮點(diǎn)字段NaN。

  • 該結(jié)構(gòu)不包含填充(-Wpadded與clang一起使用以檢查此內(nèi)容),或者在初始化時(shí)使用顯式初始化這些結(jié)構(gòu)memset。

  • 沒有成員類型(例如Windows BOOL)具有不同但等效的值。

除非您為嵌入式系統(tǒng)編程(或編寫可能在其上使用的庫),否則我不會擔(dān)心C標(biāo)準(zhǔn)中的一些特殊情況。在任何32位或64位設(shè)備上都不存在近與遠(yuǎn)指針區(qū)別。據(jù)我所知,沒有一個(gè)非嵌入式系統(tǒng)具有多個(gè)NULL指針。

另一種選擇是自動生成相等函數(shù)。如果以簡單的方式布置結(jié)構(gòu)定義,則可以使用簡單的文本處理來處理簡單的結(jié)構(gòu)定義。您可以將libclang用于一般情況-由于它使用的前端與Clang相同,因此它可以正確處理所有極端情況(排除錯誤)。

我還沒有看到這樣的代碼生成庫。但是,它看起來相對簡單。

但是,在這種情況下,此類生成的相等函數(shù)通常在應(yīng)用程序級別執(zhí)行錯誤的操作。例如,應(yīng)該UNICODE_STRING淺淺或深淺地比較Windows中的兩個(gè)結(jié)構(gòu)?


查看完整回答
反對 回復(fù) 2019-10-06
  • 4 回答
  • 0 關(guān)注
  • 549 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號