Giriş
Şu satırı dahil ederiz.
Dışarıdan bellek alanı alan ve vsnprintf metodunu sarmalayan bir metod için şöyle yaparız.
vsnprintf metodunu sarmalayan ve sabit büyüklükte bellek alanını tanımlayan bir metod için şöyle yaparız.
Şu satırı dahil ederiz.
#include <cstdio>
Örnek - Real Time Sistemde KullanılırDışarıdan bellek alanı alan ve vsnprintf metodunu sarmalayan bir metod için şöyle yaparız.
void MyPrintFunc(char *buffer, size_t sizeOfBuffer, const char* format, ...)
{
va_list arg;
va_start(arg, format);
vsnprintf(buffer, sizeOfBuffer, format, arg);
va_end(arg);
}
Çağırmak için şöyle yaparız.char buffer[1000] = { 0 };
const char* abc = "abc";
MyPrintFunc(buffer, 1000, "%s", abc);
Örnek - Real Time Sistemde Kullanılırvsnprintf metodunu sarmalayan ve sabit büyüklükte bellek alanını tanımlayan bir metod için şöyle yaparız.
void write_log(const char *message, ...)
{
char buffer[512];
va_list args;
// Parse ellipsis and add arguments to message
va_start (args, message);
vsnprintf (buffer, sizeof(buffer), message, args);
va_end (args);
...
}
Şöyle macrolar tanımlarız.#define DEBUG(msg, ...) Logger::write_log(msg, ##__VA_ARGS__);
Çağırmak için şöyle yaparız.DEBUG("Test string %s", "additional string");
Örnek
Bellek alanını hesaplayan bir metod için şöyle yaparız
void dolog(const char *format_string, va_list *arg) {
int len = vsnprintf(NULL, 0, format_string, *arg);
if (len < 0) {
return;
}
char buf[len + 1];
len = vsnprintf(buf, sizeof buf, format_string, *arg);
...
}
void log(const char *format_string, ...) {
va_list args;
va_start(args, format_string);
dolog(format_string, &args);
va_end(args1);
}
Hiç yorum yok:
Yorum Gönder