我正在连接类似printf的函数,其定义如下:
int Con_Printf(const char *format, ...)我想检查给定字符串是在参数中还是在最终格式化的字符串中,如果存在,那么用另一个字符串替换它,但是我有以下代码将参数传递给原始函数:
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")也能做到这一点。
谢谢!
发布于 2014-12-08 09:57:17
嗯,我想我错过了一个事实,即字符串部分应该包含已经格式化的文本,所以我可以直接对其执行字符串操作来替换指针。
所以,我的代码最终就这样结束了:
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编写过代码,只是在做实验)。
发布于 2020-02-29 11:24:26
static (*__cdecl)F_HOOK *edit_f(&printf, sizeof(printf))
{
__cdecl _:printf
{
/* .. code before executing printf stuff.. */
}
}https://stackoverflow.com/questions/27354946
复制相似问题