簡體   English   中英

具有char成員的結構的自定義memcmp()

[英]Custom memcmp() of a struct with char member

我編寫了以下C代碼來比較內存的兩個區域並檢查它們是否相同

#include <stdio.h>

struct s1 {

   int a, b;
   char c;

} s1;


int memcmpwannabe(void* value1, void *value2, int size1, int size2) {

   if(size1 != size2)
      return -1;

   if(size1 == 0 || size2 == 0)
      return -1;

   //memcmp() wannabe
   char *p1 = value1;
   char *p2 = value2;
   int sz = size1;

   do {
       if(*p1 != *p2)
           break;
       else
           p1++, p2++;
   }
   while(--sz != 0);

   if(sz == 0)
      return 0;

   return -1;

}


int main() {

   struct s1 v1;
   struct s1 v2;

   v1.a = 1;
   v1.b = 2;
   v1.c = 'a';

   v2.a = 1;
   v2.b = 2;
   v2.c = 'a';

   int res = memcmpwannabe((void*) &v1, (void*) &v2, sizeof(s1), sizeof(s1));

   printf("Res: %d\n", res);

}

結構相同,但是無論如何它將返回-1。 經過一些調試后,我發現char變量后的3個填充字節填充了隨機數據,而不是我期望的零。

知道這一點以及我想保持其盡可能通用的事實(因此使用void *作為參數),有人可以指出我另一種字節對字節比較嗎?

(在有人問之前,我正在編寫一個自定義memcmp(),因為在某些實現中,它將在出現差異后繼續

知道這一點以及我想保持其盡可能通用的事實( 因此使用void *作為參數

如果僅采用void *指針,那么根據定義,您對對象的內部組織一無所知。 這意味着您對字節的含義一無所知(這些字節在“真實”成員中,而在隱藏的僅填充成員中)。

我要說的是,使用標准C可以輕松做到這一點。

暫無
暫無

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

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