我有2个相同类型的结构,想要比较它们。结构的大小是420字节,我想在进行比较时跳过前2个字节,因为我知道它们永远不会匹配。我使用memcmp如下:
` typedef struct foo // total of 420 bytes
{
char c1,c2 ;
int x ;
struct temp y ;
... // lot of other members
...
...
} ;
foo f1, f2 ;
memset (&f1, 0xff, sizeof(foo) ) ;
memset (&f2,0xff, sizeof(foo) ) ;
update_foo(&f1) ; // function which updates the structure by reading value from flash memory
// Now compare 2 structures starting with value x
if ( memcmp(&f1.x, &f2.x, sizeof(foo)-2 ) == 0 )
// Do something
else
// Do something else`
比较结果给出了随机值。我假设当我传递“& f1.x”和“& f2.x”时,我跳过前两个字节,比较将是剩下的418个字节。这个假设是否正确?
答案 0 :(得分:1)
C不是一种非常动态的语言,如果你有兴趣动态地做这样的事情,你可能会尝试类似的事情。
typedef struct
{
int thatCanChange;
int thatCanChange2;
int thatICareAbout1;
...
int lastThingICareAbout;
}a;
bool same( a * one, a * two)
{
return memcmp(&(one->thatICareAbout1), &(two->thatICareAbout1), &(one->lastThingICareAbout) - &(one->thatICareAbout1) + sizeof(one->thatICareAbout1))==0;
}
答案 1 :(得分:-1)
如果您确定要跳过的内容只有两个字节,则可以使用:
memcmp(((char *)&f1) + 2, ((char *)&f2) + 2, sizeof(foo) - 2);
如果您想从x
开始比较,可以使用:
memcmp(&f1.x, &f2.x, sizeof(foo)-(((char *)&f1.x) - ((char *)&f1)))
所以它适用于x
之前的大小。