我正在使用vsprintf从格式生成一个字符串,并且在记录之前需要预先查找预先安排的字符串。下面的代码打印格式字符串,但我会如何预先给另一个字符串呢?理想情况下,以相当有效的方式。使用vsprintf预先填充字符串到另一个格式字符串的一种有效方法
例如,如果我叫这样的:
LOG(SYSTEM1, DEBUG, "number=%d, string=%s\n", 1, "Hi");
我会看到印:
SYSTEM1 number=1, string=Hi
到目前为止的代码:
#include <stdio.h>
#include <stdarg.h>
#define EMERGENCY 0
#define ERROR 1
#define WARN 2
#define INFO 3
#define DEBUG 4
enum SubSystemID { SYSTEM1, SYSTEM2, SYSTEM3, SYSTEM4 };
void LOG(enum SubSystemID id, unsigned long severity, const char* format, ...) {
static const char* chaTypes[] = {
"SYSTEM1", "SYSTEM2", "SYSTEM3", "SYSTEM4" };
char buffer[256];
va_list args;
va_start (args, format);
vsprintf(buffer, format, args);
// Code here to send a char* string to a logging system
printf(buffer);
va_end (args);
}
为什么不使用最后的'printf'来进行连接?数组应该是'static const char * const chaTypes []',否则表本身不是'const'。 – Olaf
@Olaf这太容易了。然而我怀疑'printf(buffer);'是真正的“发送char *字符串到日志系统”的占位符。 – chux
@Olaf由chux建议,printf(buffer)确实是一个将字符串发送到日志系统的占位符 –