我发现这个函数删除了另一个字符串的所有出现,仍然我不明白它是如何工作的,因为它没有修改变量ch但是它改变了变量p。 这是功能:
void enlever1(char* ch,char* sch)
{
char* p;
do
{
p=strstr(ch,sch);
if(p) strcpy(p,p+strlen(sch));
}
while(p);
}
答案 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
指向sch
中ch
中包含的字符串的位置。如果找不到这样的字符串,则返回NULL
,并将其分配给p
。