| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1390 人关注过本帖
标题:使用 strcat 遇到一个匪夷所思的问题
只看楼主 加入收藏
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 19 楼 embed_xuel
上面的代码输出是这样的
UIN: &UIN=835907249
UIN:
VER=1.1&CMD=Login&SEQ=Thu Jul 17 12:33:20 2014&PS=8d3f0280996672d092acccff7f&M5=1&LC=9326B87B234E7235
2014-07-17 14:51
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
encryptpwd是什么?

总有那身价贱的人给作业贴回复完整的代码
2014-07-17 14:54
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 22 楼 embed_xuel
是一个32位的加密字符串
2014-07-17 15:00
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 23 楼 锋了
代码呢?

总有那身价贱的人给作业贴回复完整的代码
2014-07-17 15:02
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用embed_xuel在2014-7-17 15:02:07的发言:

代码呢?



貌似你今天心情不错哦

DO IT YOURSELF !
2014-07-17 15:05
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 24 楼 embed_xuel
程序代码:
void QMD5(const void *encrypt, size_t strlen, unsigned char *md)
{
    MD5_CTX     ctx;

    if (MD5_Init(&ctx) != 1){
        fprintf(stderr, "MD5_Init error:%s\n", strerror(errno));
        exit(1);
    }
    if (MD5_Update(&ctx, encrypt, strlen) != 1){
        fprintf(stderr, "MD5_Update error:%s\n", strerror(errno));
        exit(1);
    }
    if (MD5_Final(md, &ctx) != 1){
        fprintf(stderr, "MD5_Final error:%s\n", strerror(errno));
        exit(1);
    }
}

    char    encryptpwd[33];
    char    tmp[3];
    time_t      tick;
    unsigned char md[17];

/* Http protocol command string */
    char    ver[23 + 25] = "VER=1.1&CMD=Login&SEQ=";
    char    seq[25];
    char    uin[MAXNAME + 5] = "&UIN=835******";
    char    ps[33 + 6] = "&PS=";
    char    m5[27] = "&M5=1&LC=9326B87B234E7235";

    tick = time(0);
    if (ctime_r(&tick, seq) == NULL)
        err_quit("ctime_r error");
    seq[strlen(seq)-1] = '\0';
   

    QMD5(pwd, strlen(pwd), md);
    for (i = 0; i < strlen(md); i++)
    {
        sprintf(tmp, "%02x", md[i]);
        strcat(encryptpwd, tmp);
    }

    encryptpwd[strlen(encryptpwd)] = '\0';
    strcat(ver, seq);
    printf("UIN: %s\n", uin);
    //strcat(uin, name);
    strcat(ps, encryptpwd);
    printf("UIN: %s\n", uin);
2014-07-17 15:11
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
我始终看不明白这两句:
seq[strlen(seq)-1] = '\0';
encryptpwd[strlen(encryptpwd)] = '\0';

你是觉得encryptpwd没有'\0'才要添加的吗?那encryptpwd没有'\0',你用strlen(encryptpwd)求出来的数能是对的吗?

总有那身价贱的人给作业贴回复完整的代码
2014-07-17 15:19
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 27 楼 embed_xuel
忽略那两句吧,你就当没有,因为没有那两句是不影响的,我原来只是出问题后试验性加进去的
2014-07-17 15:35
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
for (i = 0; i < strlen(md); i++)
    {
        sprintf(tmp, "%02x", md[i]);
        strcat(encryptpwd, tmp);
    }

    printf("encryptpwd: %s\n",encryptpwd);     //encryptpwd[strlen(encryptpwd)] = '\0';   把encryptpwd打印出来看看
    strcat(ver, seq);
    printf("UIN: %s\n", uin);
    //strcat(uin, name);
    strcat(ps, encryptpwd);
    printf("UIN: %s\n", uin);

总有那身价贱的人给作业贴回复完整的代码
2014-07-17 15:50
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 29 楼 embed_xuel
我发现问题了,其实是针对unsigned char 类型调用strlen和sizeof有时得到的值不是我们期望的,就是混淆了strlen和sizeof的使用


[ 本帖最后由 锋了 于 2014-7-17 16:52 编辑 ]
2014-07-17 16:48
快速回复:使用 strcat 遇到一个匪夷所思的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031921 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved