1.当将lockId代码块放在后面时会出现段错误。
#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;
}
编译后执行结果如下:
2.将lockId代码块放在首位能够正常执行。
#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;
}
编译后执行结果如下:
这种段错误的原因是什么?