首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >挂钩类Printf函数和修改输出

挂钩类Printf函数和修改输出
EN

Stack Overflow用户
提问于 2014-12-08 09:27:50
回答 2查看 2.1K关注 0票数 0

我正在连接类似printf的函数,其定义如下:

代码语言:javascript
复制
int Con_Printf(const char *format, ...)

我想检查给定字符串是在参数中还是在最终格式化的字符串中,如果存在,那么用另一个字符串替换它,但是我有以下代码将参数传递给原始函数:

代码语言:javascript
复制
va_list args;
char *parg;

va_start(args, format);
vasprintf(&parg, format, args);
va_end(args);

(*conprint)("%s", parg);
free(parg);

是(*conprint)原始的Con_Printf函数。

如何查看已应用格式的字符串(即将参数替换为占位符)来替换所需的内容,而不只是传递所有参数?

示例:程序调用Con_Printf("%s %s“、"foo”、"bar"),我想在Con_Printf钩子中知道"bar“是否在参数中,但我不知道有多少参数是因为",.”Con_Printf的定义。

如果在参数中找到" bar“,那么将其替换为"baz”,并转发一个修改的调用(*conprint)("%s %s“、"foo”、"baz") (将bar替换为baz)。(*连载)(“foo baz")也能做到这一点。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-12-08 09:57:17

嗯,我想我错过了一个事实,即字符串部分应该包含已经格式化的文本,所以我可以直接对其执行字符串操作来替换指针。

所以,我的代码最终就这样结束了:

代码语言:javascript
复制
va_list args;
char *parg;

va_start(args, format);
vasprintf(&parg, format, args);
va_end(args);

char* replacedstr;
replacedstr =  str_replace(parg, "bar", "baz");
(*conprint)("%s", replacedstr); 
free(parg);

str_replace是我在某个地方找到的一个很好的函数(我从来没有用C编写过代码,只是在做实验)。

票数 0
EN

Stack Overflow用户

发布于 2020-02-29 11:24:26

代码语言:javascript
复制
static (*__cdecl)F_HOOK *edit_f(&printf, sizeof(printf))
{
    __cdecl _:printf
    {
    /* .. code before executing printf stuff.. */
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27354946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档