打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用memcmp()比较结构体
userphoto

2010.12.10

关注

关于用memcmp()比较两个结构体,做了以下调试:

代码
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

struct CmpTest
{
    
char    a;
    
short    b;
    
int    c;
};

int main()
{
    CmpTest    t1, t2;
    printf(
"%d\t",memcmp(&t1, &t2, sizeof(CmpTest)));
    
    CmpTest t3, t4;
    memset(
&t3, 0sizeof(CmpTest));
    memset(
&t4, 0sizeof(CmpTest));
    printf(
"%d\n",memcmp(&t3, &t4, sizeof(CmpTest)));
    
    t1.a 
= 'a';
    t1.b 
= 1;
    t1.c 
= 123456;
    t2.a 
= 'a';
    t2.b 
= 1;
    t2.c 
= 123456;
    printf(
"%d\t",memcmp(&t1, &t2, sizeof(CmpTest)));
    
    t3.a 
= 'a';
    t3.b 
= 1;
    t3.c 
= 123456;
    t4.a 
= 'a';
    t4.b 
= 1;
    t4.c 
= 123456;
    printf(
"%d\n",memcmp(&t3, &t4, sizeof(CmpTest)));
    
    t2 
= t1;
    printf(
"%d\t",memcmp(&t1, &t2, sizeof(CmpTest)));
    
    t4 
= t3;
    printf(
"%d\n",memcmp(&t3, &t4, sizeof(CmpTest)));
}

输出结果为:
1    0
0    0


如果把结构体改成:

struct CmpTest
{
    
char    a;
    
short    b;
    
int    c;
    
char    d;
};
输出结果为:
1       0
1       0
0       0


由此得出结论:

可以通过memcmp()来比较2个相同的结构体变量,但这2个变量必须在赋值前进行清零初始化(否则结果不准确) ,或者2者是通过直接对等赋值而来。

另外,结构体的命名对memcmp()没有影响(只要内部结构完全一样)。因为:

代码3
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

struct CmpTest
{
        
char    a;
        
short   b;
        
int     c;
        
char    d;
};

struct CmpTest1
{
        
char    a;
        
short   b;
        
int     c;
        
char    d;
};

int main()
{
        CmpTest t1;
        CmpTest1 t2;
        printf(
"%d\t",memcmp(&t1, &t2, sizeof(CmpTest)));

        CmpTest t3;
        CmpTest1 t4;
        memset(
&t3, 0sizeof(CmpTest));
        memset(
&t4, 0sizeof(CmpTest));
        printf(
"%d\n",memcmp(&t3, &t4, sizeof(CmpTest)));

        t1.a 
= 'a';
        t1.b 
= 1;
        t1.c 
= 123456;
        t1.d 
= 'a';
        t2.a 
= 'a';
        t2.b 
= 1;
        t2.c 
= 123456;
        t2.d 
= 'a';
        printf(
"%d\t",memcmp(&t1, &t2, sizeof(CmpTest)));

        t3.a 
= 'a';
        t3.b 
= 1;
        t3.c 
= 123456;
        t3.d 
= 'a';
        t4.a 
= 'a';
        t4.b 
= 1;
        t4.c 
= 123456;
        t4.d 
= 'a';
        printf(
"%d\n",memcmp(&t3, &t4, sizeof(CmpTest)));
}

输出结果为:
1       0
1       0
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Onvif开发之服务端发现篇
[C语言]字符串处理 以指定的字符串分割字符串
Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
C语言 时间戳和标准格式的转换
NOIP复赛复习(六)STL容器与字符串模板
两个超级有意思的C语言题目,很多人都一脸懵逼
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服