我正在使用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)確實是一個將字符串發送到日誌系統的佔位符 –