将所有printf输出到内存变量中。printf转string

本文介绍了一种在C++中将printf输出重定向至字符串的方法,通过定义宏和辅助函数,可以轻松地将所有格式化的输出内容收集并保存在std::string变量中,便于进一步的数据处理或展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一般coding时,会使用非常多的printf,格式化输出到命令行来显示,但如果有一天希望将格式化输出的内容不输出到命令行,而是保存到一个字符串string变量里,供其他代码使用。这时,最好的方式不是一个一个去修改printf,而是用下面的方式:


void functionA()
{
。。。
printf( "%06x:", ((u1*)insns - pDexFile->baseAddr) + insnIdx*2);
。。。
printf(" %02x%02x", bytePtr[0], bytePtr[1]);
。。。
printf("     ");
。。。
brintf("|%04x: nop // spacer", insnIdx);
。。。
}



希望将上面的printf所有内容保存到变量std:string allInfo中,修改为:


std::string & std_string_format(std::string & _str, const char * _Format, ...) {  
	std::string tmp;  


	va_list marker = NULL;  
	va_start(marker, _Format);  


	size_t num_of_chars = _vscprintf(_Format, marker);  


	if (num_of_chars >= tmp.capacity()) {  
		tmp.resize(num_of_chars + 1);  
	}  


	vsprintf_s((char *)tmp.data(), tmp.capacity(), _Format, marker);  


	va_end(marker);  


	_str = tmp.c_str();  
	return _str;  
}  


void functionA()
{
#define PRINT(_FORMATE, ...)  allInfo += std_string_format(info, _FORMATE, ##__VA_ARGS__);//printf("%s", info.c_str());
#define printf(_FORMATE, ...) PRINT(_FORMATE, ##__VA_ARGS__)
std::string info,allInfo;


。。。
printf( "%06x:", ((u1*)insns - pDexFile->baseAddr) + insnIdx*2);
。。。
printf(" %02x%02x", bytePtr[0], bytePtr[1]);
。。。
printf("     ");
。。。
printf("|%04x: nop // spacer", insnIdx);
。。。


#undef printf
}


什么都不用动,只要在functionA中加4行代码即可。前面2行宏和1行变量定义,后面1行undef,这样,就会将printf输出的所有内容保存到变量allInfo中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值