如何比较标准C中两个相等的struct实例?


当前回答

memcmp不比较结构,memcmp比较二进制,结构中总是有垃圾,因此在比较中总是输出False。

逐个元素比较它是安全的,不会失败。

其他回答

C语言没有提供这样做的语言工具——你必须自己做,并逐个比较每个结构成员。

您可能会尝试使用memcmp(&a, &b, sizeof(struct foo)),但它可能不是在所有情况下都有效。编译器可以向结构体添加对齐缓冲空间,并且在位于缓冲空间的内存位置上找到的值不保证是任何特定的值。

但是,如果在使用结构之前使用calloc或memset结构的完整大小,则可以与memcmp进行浅比较(如果结构包含指针,则只有在指针指向的地址相同时才匹配)。

如果这2个结构变量是用calloc初始化的,或者它们被memset设置为0,这样你就可以用memcmp比较你的2个结构,不用担心结构垃圾,这将让你赚到时间

memcmp不比较结构,memcmp比较二进制,结构中总是有垃圾,因此在比较中总是输出False。

逐个元素比较它是安全的,不会失败。

注意,可以在非静态结构上使用memcmp() 担心填充,只要你没有初始化 所有成员(同时)。这是C90定义的:

http://www.pixelbeat.org/programming/gcc/auto_init.html