strstr函数,找不到问题在哪?

jingxingxiaozhang 2016-10-29 09:53:11
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int qukong(char* str, char*sub_str)
{
char* begin = str;
char* end = NULL;
end = begin + strlen(str) - 1;
char* temp = sub_str;
if (str == NULL || sub_str == NULL) {
fprintf(stderr, "str==NULL||sub_str==NULL");
return -1;
}

// while (*begin = ' '&&*begin != '\0')begin++;
while (isspace(*begin) && *begin != '\0')begin++;

// while (*end = ' '&&end > begin)end--;
while (isspace(*end) && end > begin)end--;
int len = end - begin + 1;
for (int i = 0; i < len; i++)
{
*(temp + i) = *(begin + i);
}
*(temp + len + 1) = '\0';
return 0;
}
/*
键值对(“key=value”)字符串,在开发中经常使用
要求1:清自己定义一个接口,实现根据key获取
要求2:编写测试用例。
要求3:键值对中间可能有n多空格,请去除空格
注意:键值堆字符串格式可能如下:
“key1=value1”
"key2= value2"
"key3 =value3 "
"key4 =value4"
"key5 = "
"key6 ="
*/
/*
此函数实现以下:
“key1=value1”
"key2= value2 "
"key3 =value3 "
"key4 =value4"
"key5 = "
"key6 ="
keyvaluebuf:in 输入,得到原字符串
keybuf :in输出,要找到的key
valuebuf :out输出,得到value
valuelen :out输出,得到value长度
int getkeybyvalue(char* keyvaluebuf,char*keybuf,char*valuebuf,int* valuelen)
*/
int getkeybyvalue(/*in*/char* keyvaluebuf,/*in*/ char*keybuf,/*out*/ char*valuebuf, int* valuelen)
{
char* p= keyvaluebuf; //复制了三个的首地址
char* key_p = keybuf;
char* value_p = valuebuf;

//1.要找到key
p = strstr(p, key_p);
if (p == NULL)
{
printf("meiyou zhao dao key\n");
return -1;
}

//2.要找到=
p = p+strlen(key_p);
printf("get2\n"); //运行时出现了get2
p = strstr(p,'='); //问题应该就出现在这里,为什么会导致崩溃?
if (p == NULL) {
printf("meiyou zhao dao =\n");
return -1;
}
printf("get3\n"); //没有出现get3
//3.要找到value
p++;
int ent=qukong(p, value_p);
if (ent < 0)printf("xunzhao shibai!\n");

int len = 0;
len = strlen(value_p);
*valuelen = len;

return 0;

}
int main()
{
char* str = " key2= value2 ";
char* key = "key2";
char* valuebuf[120] = { 0 };
int len = 0;
int retn = 0;
retn = getkeybyvalue(str, "key2", valuebuf, &len);
if (retn < 0)
{
printf("shibai!");
return -1;
}
printf("valuebuf:%s", valuebuf);

return 0;
}
就是出现在我注释的地方,获取=所在地址。
//2.要找到=
p = p+strlen(key_p);
printf("get2\n"); //运行时出现了get2
p = strstr(p,'='); //问题应该就出现在这里,为什么会导致崩溃?
if (p == NULL) {
printf("meiyou zhao dao =\n");
return -1;
}
printf("get3\n"); //没有出现get3
问题出在哪里呢??
...全文
634 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
begodliker 2016-10-30
  • 打赏
  • 举报
回复
两个编译错误: 1、p = strstr(p,'='); //问题应该就出现在这里,为什么会导致崩溃? 应该是"=",而不是'='; 2、char* valuebuf[120] = { 0 }; 应该是char valuebuf[120] = { 0 }; 去掉 *
jingxingxiaozhang 2016-10-30
  • 打赏
  • 举报
回复
没人给说说吗

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧