我有这个功能:
GET / HTTP/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);
}