从字符串中删除子字符串?

Bla*_*ary 11 c string

我有一个C函数,它接受一个名为'buffer'的字符串,并解析它,它将匹配关键字并使用它来分配结构中的值.

但是,我想完全忽略一些关键字.

该程序解析VCard文件(.vcf,虚拟名片).

以下是可能提供的示例行缓冲区:

FN;CHARSET=UTF-8:David Celery
Run Code Online (Sandbox Code Playgroud)

FN是我感兴趣的关键词,而David Celery是与FN相关的值.

然而,CHARSET = UTF-8是我根本不关心的事情.

所以我的问题是,有没有办法让我扫描我的缓冲区,只需用'"替换'CHARSET = UTF-8',这样我就不用担心解析它(以及我想要的其他类似关键字)忽视).

谢谢,

use*_*313 15

看看简单的ANSI C解决方案,如:

void removeSubstring(char *s,const char *toremove)
{
  while( s=strstr(s,toremove) )
    memmove(s,s+strlen(toremove),1+strlen(s+strlen(toremove)));
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你存储了`strlen(toremove)`它会更有效 - 不需要为每个循环确定两次. (8认同)
  • @ user411313.我同意ThiefMaster,手册里充满了**可怕的**例子.为什么不在这里发布更有效和干净的代码.它甚至可以使你的答案成为upvote的更好目标. (5认同)
  • 我收到警告和试图使用此代码的段错误。某处有错误吗?如果有问题,我正在使用c99。 (2认同)