我在移除位于另一个开头的子串时遇到问题。我尝试了2或3个不同的选项,但是当我打印修改过的字符串时,它们似乎都没有。你能告诉我我做错了什么或者告诉我其他方法来删除子串吗?
以下是我使用的代码:
int i;char *c,*p;
c= malloc(200*sizeof(char));
fgets(c,200,stdin);
p=malloc(200*sizeof(char));;
fgets(p,200,stdin);
if (strstr(c,p) != NULL)
{
if ((strlen(c)-strlen(p))>2)
{
c= c+strlen(p);
//memmove(c,c+strlen(p),strlen(c)-strlen(p)+1);
}
}
printf("%s \n",c);
答案 0 :(得分:0)
你必须存储/记住strstr()调用的结果,它是字符串中的子字符串所在的位置
根据我的意见,使用strlen进行操作是没用的,并且分配给c
是错误的,因为你正在丢失指向堆字符串的指针,这肯定是内存泄漏
更新
类似
char* r = NULL; // result to be stored here
char* q = strstr(c, p);
if (q != NULL)
{
r = malloc(200);
strcpy(r, q);
}
if (r)
printf("%s \n", r);
// cleanup
if (r)
free(r);
free(c);
free(p);