为什么替换某个字符的函数只对字符的第一个实例执行此操作?

时间:2016-07-14 14:02:11

标签: c function

我有这个功能:

GET / HTTP/1.1

当我使用它时,它只会更改要替换的字符的第一个实例。有什么方法可以让它对所有人说这个吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要一个循环,在替换字符串结束后重新分配字符串的开头。实际上,你的函数只执行一次动作,因为strstr返回指向str中第一个出现的单词orig的指针。

编辑:这可能会让您知道如何做到这一点。我无法在此计算机上对其进行测试,因此可能无法直接使用。 我使用malloc做到了,因为在我看来,静态字符不应该以这种方式使用。它应该存储在缓冲区中的值以供将来使用该函数。如果重新使用此函数,您将丢失该函数的先前返回值... 这是我的方式,当然有一种更有效的方法。这个功能的优点是它适应任何字符串长度。

char *replace_str(char *str, char *orig, char *rep)
{      
  char *buffer;
  char *previous_version;
  char *p;
  size_t occurring_position;

  if (strcmp(orig, rep) == 0)
  {  
     return(str); 
  }         
  buffer = strdup(str);
  while ((p = strstr(buffer, orig)))
  {
     occuring_position = p - buffer;
     previous_version = strdup(buffer);
     free(buffer);
     buffer = malloc(strlen(previous_version) + strlen(rep) - strlen(orig)); 
     strcnpy(buffer, previous_version, occurring_position);
     strcpy(buffer, rep);
     strcpy(buffer + occurring_position + strlen(rep), previous_version + occurring_position + strlen(orig));
     free(previous_version);
  }
  return (buffer);
}
相关问题