我发现这个函数可以删除另一个字符串中所有出现的字符串,但我仍然不明白它是如何工作的,因为它没有修改变量 ch 但它改变了变量 p 。 这是函数:
void enlever1(char* ch,char* sch)
{
char* p;
do
{
p=strstr(ch,sch);
if(p) strcpy(p,p+strlen(sch));
}
while(p);
}
最佳答案
首先,字符串在内存中以数组的形式存储,多个指针可能指向单个字符串。
成功时,strstr
返回一个指针,指向 ch
指向的字符串中第一次出现 sch
的位置。现在,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!
关于c - 删除一个字符串中出现的另一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20690581/