真是太菜了,犯了知道、却不会在实际中灵活运用的错误
耽误了一天的时间,真是不应该
内容:从字符串中抽取出一部分来保存使用
char *check(const char *content)
{
if(NULL == content)
{
return NULL;
}
const char *p_start = strstr(content, "kkkkkkkkkk");
if(NULL == p_start)
{
return NULL;
}
/*根据协议前两个k是分割符*/
p_start += 2;
const char *p_end = p_start;
int len = 0;
while(*p_end != 'a' )/*以a字符结束*/
{
len++;
p_end++;
}
char *bound = (char *)malloc(len + 1);
if(NULL == bound)
{
return NULL;
}
memcpy(bound, p_start, len);
return bound;
}
结果很让人匪夷所思,程序有时执行正确,有时执行错误,找了半天原因才发现问题
原因:没有在bound指针需要结束的地方加上'\0',导致得到的字符串结果不正常
修改:
修改的也很sb,我第一版居然是这么修改的
char *bound_end = bound;
int count = 0;
while(count != len)
{
bound_end++;
count++;
}
*bound_end = '\0';
这个真是太2了
比较好的修改:
1:
*(bound + len) = '\0'; 居然这都没想到, 真是基础知识太差了
2:
*((char *) (bound + len)) ='\0'; 这个也可以,但和上面的区别不太清楚,谁能给解答下
3:
char *bound = (char *)malloc(len + 1);
改为 char *bound = (char *)calloc(1, len + 1);/*calloc会自动为分配的内存赋值0*/