从C中的字符串开头删除子字符串

时间:2014-12-05 15:34:23

标签: c string character substring dynamic-memory-allocation

我在移除位于另一个开头的子串时遇到问题。我尝试了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);

1 个答案:

答案 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);