gpt4 book ai didi

c - 寻找类似于 PHP 的 C/C++ str_replace(),但没有 malloc()/realloc(),使用原始缓冲区

转载 作者:行者123 更新时间:2023-11-30 18:58:54 26 4
gpt4 key购买 nike

我正在寻找 PHP-like str_replace()对于 C/C++,但我只找到了为结果分配/重新分配缓冲区的解决方案。在嵌入式环境中,这并不总是可能的,没有字符串内存,甚至没有malloc()。所以我正在寻找一个函数,它使用相同的缓冲区,类似于 strncat(),其中 max.缓冲区大小作为参数给出:

 void str_replace(char* search,char* replace,char* subject,int maxBufferSize);

关键是,我刚刚写了一个,我将在一分钟内发布。是的,这是回答我自己的问题的典型案例,但是I've read that it's legal .

无论如何,我会按最佳答案的“接受”按钮。我的解决方案已经过测试,希望效果良好,但仍有改进的空间。我相信会有更好的答案。我可以等。

最佳答案

这是我的尝试,未经测试:

void str_replace(char *search, char *replace, char *subject, size_t size)
{
char *end = subject+size;
size_t sl = strlen(search);
size_t rl = strlen(replace);
size_t l = strlen(subject);
char *src = memmove(end-l-1, subject, l+1);
char *dest = subject;
while (*src) {
char *match = strstr(src, search);
if (!match) {
match = src + strlen(src);
rl = 0;
}
memmove(dest, src, match-src);
dest += match-src;
src = match+sl;
memcpy(dest, replace, rl);
dest += rl;
}
*dest = 0;
}

这假设 strlen(replace) <= strlen(search) 。如果不满足该约束,则需要进行一些额外的检查以确保 dest未通过src并且当复制到位时替换件适合。

该算法对于避免过度访问(读取和写入)来说应该是近乎最佳的。

关于c - 寻找类似于 PHP 的 C/C++ str_replace(),但没有 malloc()/realloc(),使用原始缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14653564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com