删除另一个字符串的出现

时间:2013-12-19 19:59:58

标签: c string

我发现这个函数删除了另一个字符串的所有出现,仍然我不明白它是如何工作的,因为它没有修改变量ch但是它改变了变量p。 这是功能:

void enlever1(char* ch,char* sch)
{
    char* p;
    do
    {
        p=strstr(ch,sch);
        if(p) strcpy(p,p+strlen(sch));
    }
    while(p);
}

2 个答案:

答案 0 :(得分:1)

首先,字符串作为数组存储在内存中,而多个指针可能指向单个字符串。

成功时,strstr返回指向sch指向的字符串中第一次出现ch的指针。现在,p指针指向原始字符串的一部分 - 当您使用p指针更改字符串时,您将更改原始字符串。

以下是简化示例:假设您有一个字符串存储在内存中,如下所示:

Hello World!\0 
^            ^
|            |
ch          end of string character

现在,假设您执行p = strstr(ch, "Wo")p指针将指向原始字符串的一部分:

Hello World!\0 
^     ^      ^
|     |      |
ch    p     end of string character

现在,如果您更改p,您还将更改ch

p[0] = 'T'; /* change the first character to T */

这将导致:

Hello Torld!\0 
^     ^      ^
|     |      |
ch    p     end of string character

printf(ch)会打印出来:

Hello Torld!

答案 1 :(得分:0)

strstr不会删除该匹配项,但会在sch中找到ch。您的变量p指向schch中包含的字符串的位置。如果找不到这样的字符串,则返回NULL,并将其分配给p