| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1390 人关注过本帖
标题:使用 strcat 遇到一个匪夷所思的问题
取消只看楼主 加入收藏
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
结帖率:88.89%
收藏
已结贴  问题点数:10 回复次数:16 
使用 strcat 遇到一个匪夷所思的问题
在程序中声明了四个字符串如:
char   ver[23 + 25] = "(初始赋给22个字符)"
char   seq[25]
char   mm[16] = "(初始赋给14个字符)“
char   ps[33 + 5] = "(初始赋给4个字符)”
char   buf[33]

fun(seq)   /* 把24字节数据装入seq中*/
fun2(buf)   /* 把32字节装入buf中*/

然后调用strcat
1、strcat(ver,seq)
2、strcat(ps, buf)
执行完第一步printf出mm的值没有变,执行完第二步printf出mm的值为空。ps的值是正确的。
然后调试了一下发现执行第一步后mm在内存中的值为
“ABABABABABABAB\00"
执行第二步后mm在内存中的值为
“\000BABABABABABAB\000"     /* 字符串头多了“\000"并覆盖掉了第一个‘A’*/
我觉得是第二个strcat在操作数据段时出的问题,于是将上面的声明改为ps声明在mm之前,如下
char   ps[33 + 5] = "(初始赋给4个字符)”
char   mm[16] = "(初始赋给14个字符)“

问题就不再出现了。但我现在还不知道是什么问题?大家觉得是什么问题?
先去吃饭现。。。。。
搜索更多相关主题的帖子: 字符串 
2014-07-17 12:39
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 2 楼 embed_xuel
程序代码:
/* Http protocol command string */
    char    ver[23 + 25] = "VER=1.1&CMD=Login&SEQ=";
    char    seq[25];
    char    uin[MAXNAME + 5] = "&UIN=835907249";
    char    ps[33 + 6] = "&PS=";
    char    m5[27] = "&M5=1&LC=9326B87B234E7235";

strcat(ver, seq);
    printf("UIN: %s\n", uin);
    strcat(ps, encryptpwd);
    printf("UIN: %s\n", uin);
2014-07-17 13:30
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 3 楼 锋了
这是为了在连接一个http协议字符串。

随便问一下版主,如何实现发送http协议和接收返回呢?
我刚学网络编程,已经成功连接,我使用write将这个http协议写到套接字中,但是没有返回相应的http协议
2014-07-17 13:35
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 5 楼 wp231957
代码看不出来的话想运行自己加点就可以编译运行了吧,这么简单的代码
2014-07-17 13:48
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 7 楼 embed_xuel
一楼的代码和这里是不一样的,那是给个大概样子而已。seq赋值代码有点长没有贴出。mm对应的是uin
2014-07-17 13:57
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 8 楼 锋了
MAXNAME大小是11
2014-07-17 13:59
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 9 楼 embed_xuel
tick = time(0);
    if (ctime_r(&tick, seq) == NULL)
        err_quit("ctime_r error");
    seq[strlen(seq)-1] = '\0';
2014-07-17 14:04
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 12 楼 embed_xuel
ctime_r函数是根据将tick值转换为可读的日期字符串并存到seq的缓冲区中,
seq[strlen(seq-1)] = '\0'是因为ctime_r返回的的字符串末尾自动加了'\n'符,这是为了让seq以'\0'结尾。。。。。

2014-07-17 14:31
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 14 楼 embed_xuel
返回字符串的长度,好像是不包括结尾。
跟这个没有关系的,我原来是没加这行的,因为有问题所以加了这句。。。如果去掉也是没有用的
2014-07-17 14:39
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 16 楼 embed_xuel
如果你觉得是这个问题的话,我把所有有关seq的代码都注細掉。这是没有影响的
2014-07-17 14:45
快速回复:使用 strcat 遇到一个匪夷所思的问题
数据加载中...
 
   



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

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