2014-12-05 173 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);