c - 删除一个字符串中出现的另一个字符串

标签 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);
}

最佳答案

首先,字符串在内存中以数组的形式存储,多个指针可能指向单个字符串。

成功时,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/

相关文章:

c - 释放二维数组 - 检测到堆损坏

string - 更改/更改单元格值的第 N 个元素 Excel VBA

php 洗牌

c++ - "hello"和 {"hello"} 有什么区别?

c - C语言中如何接受带空格的字符串输入

r - 使用 `apply` 将字符串修改为 `tolower`

c# - 从 List<string> 中选择带有排除项和非重复选择的随机字符串

python - 要在 Python 中列出的字符串

ruby-on-rails - 在 Ubuntu 服务器上通过 ruby​​ 脚本启动 C 可执行文件

html - libxml2 - 在父节点的内容之前插入子节点