#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include "packag_server.h"
#define DATA_LEN 500
char *Login_post_reply(char *msg)
{
char *productId = malloc(DATA_LEN);
char *featureId = malloc(DATA_LEN);
char *lockId = malloc(DATA_LEN);
char *t = malloc(DATA_LEN);
productId = strstr(msg, "productId");
productId += 11;
t = strstr(productId, ",");
*t = '\0';
printf("productId = %s\n",productId);
featureId = strstr(msg, "featureId");
featureId += 11;
t = strstr(featureId, ",");
*t = '\0';
printf("featureId = %s\n",featureId);
lockId = strstr(msg, "lockId");
lockId += 9;
t = strstr(lockId, "\"");
*t = '\0';
printf("lockId = %s\n",lockId);
printf("productId = %s featureId = %s lockId = %s\n",productId, featureId, lockId);
/* if(qp(productId, featureId, lockId))
{
} */
}
int main()
{
char data[] = "{ \n"
" id\": 12345,\n"
" featureId\": 0,\n"
" productId\": 0,\n"
" lockId\":\"123456\",\n"
" sign\":\"7f383431123232\",\n"
" method\":\n\"Login_post\"\n"
"}\n";
Login_post_reply(data);
//printf("data = %s\n",data);
return 0;
}
编译后执行结果如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include "packag_server.h"
#define DATA_LEN 500
char *Login_post_reply(char *msg)
{
char *productId = malloc(DATA_LEN);
char *featureId = malloc(DATA_LEN);
char *lockId = malloc(DATA_LEN);
char *t = malloc(DATA_LEN);
lockId = strstr(msg, "lockId");
lockId += 9;
t = strstr(lockId, "\"");
*t = '\0';
printf("lockId = %s\n",lockId);
productId = strstr(msg, "productId");
productId += 11;
t = strstr(productId, ",");
*t = '\0';
printf("productId = %s\n",productId);
featureId = strstr(msg, "featureId");
featureId += 11;
t = strstr(featureId, ",");
*t = '\0';
printf("featureId = %s\n",featureId);
printf("productId = %s featureId = %s lockId = %s\n",productId, featureId, lockId);
/* if(qp(productId, featureId, lockId))
{
} */
}
int main()
{
char data[] = "{ \n"
" id\": 12345,\n"
" featureId\": 0,\n"
" productId\": 0,\n"
" lockId\":\"123456\",\n"
" sign\":\"7f383431123232\",\n"
" method\":\n\"Login_post\"\n"
"}\n";
Login_post_reply(data);
//printf("data = %s\n",data);
return 0;
}
编译后执行结果如下:
这种段错误的原因是什么?
首先~你的代码里
char *productId = malloc(DATA_LEN);
char *featureId = malloc(DATA_LEN);
char *lockId = malloc(DATA_LEN);
char *t = malloc(DATA_LEN);
申请的内存都没用到;
其次strstr
这个函数的意思和他怎么识别字符串的原理你没有搞清楚;
strstr的功能和返回值是什么你可以网上百度查一下;如果你还没搞懂评论下我继续问.
识别字符串是怎么识别的呢?
我们都知道 char a[7]="abcefg";是一个字符串,但是这里只有6个字符为什么字符数组要给7?,因为要留一个位置给结束标志,也就是 '\0',
如果我们后期 把 a[5] = '\0'; 了,那么我们printf("%s",a)的时候我们就会发现只打印了 "abcd"出来因为** 字符串结束是以它看到的第一个'\0'为标准的**
所以你仔细看你前面的代码 是不是 "productId" 在 "lockId"前面??? 结合你自己网上自己搜索到的strstr 的作用以及 返回值 你肯定可以知道答案;