strstr函数,找不到问题在哪?
#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
问题出在哪里呢??