2014-12-05 224 views
0

我在删除位于另一个字符串开头的子字符串时遇到问题。我已经尝试了2或3个不同的选项,但是当我打印修改过的字符串时,它们都没有工作。你能告诉我我做错了什么,或告诉我其他方式删除子字符串?从C中的字符串开头删除子字符串

这里是我使用的代码:

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

并请标明问题,以语言标记(c和/或C++) – 2014-12-05 16:05:26

+0

你应该仔细的解释。如果出现在'c'中输入的字符串的开头,我认为你正试图删除在'p'中输入的字符串。如果是这样,你需要从'c'中删除换行符,需要一个锚定的比较(可能是'strncmp()')来实现相等性,然后将'c'匹配后出现的'p'部分复制到(所以'memmove()'是正确的,'memcpy()'通常是不正确的 - 更确切地说,它是不正确的,除非'p'小于'c'的两倍。 – 2014-12-05 16:26:16

+0

谢谢你的帮助! – afsq 2014-12-05 18:31:42

回答

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