字符串替换C中的多次出现

时间:2014-01-24 22:56:19

标签: c

我在网上找到的大多数模块都会取代该字符串的第一次出现。但我想要一个模块,它将搜索每一个匹配项,并将替换该字符串。我发现堆栈溢出的代码非常繁琐,所以我没有调查它。我工作的环境只支持C编译器。所以C ++命令调整评论不受欢迎。这就是我来的。它仍然让我错误。任何帮助表示赞赏。

#include <stdio.h>
#include <string.h>
char *replace_str(char *str, char *orig, char *rep)
{
  char *buffer;
  char *p, *work;

  while(strstr(str,orig))
  {
  p = strstr(str, orig);  

  strncpy(work, str, p-str);
  strcat(buffer, work);
  //strncpy(buffer+strlen(buffer), str, p-str);
  strcat(buffer, rep);
  p+=strlen(orig);
  str = p;
  }
   return strcat(buffer,p);
}
int main(void)
{
  puts(replace_str("Hello, Kate! I once had a cat named Kate! ", "Kate", "Paul"));
  return 0;
}

1 个答案:

答案 0 :(得分:2)

您的代码会产生未定义的行为,因为您尝试从/向bufferwork复制,而不为它们分配内存。使用malloc并且不要再忘记free所有内容。

如果替换被限制为与要替换的字符串相同的长度,那么您根本不需要缓冲区。否则,您必须确保稍后在调用部分中free返回的字符串。