Я реализовал расширение Ruby C (то есть, вызывая функцию C из сценария ruby). Ниже приведена функция переменного аргумента, реализованная в C из файла "cImplementation.c"
#include<stdio.h>
static VALUE cFunction(VALUE self, VALUE exp, const char* fmt, ...)
{
//1st Trial to get expected output
char buff[256];
va_list args;
va_start(args, fmt);
if(vsnprintf(buf, sizeof(buff), fmt, args) > 0)
fputs(buff, stderr);
va_end(args);
// 2nd Trial to get expected output
va_list args;
char buf[1024];
va_start(args,fmt);
vsnprintf(buf, 1024, fmt, args);
printf("String :: %s", buf);
va_end(args);
return Qnil;
}
void Init_MyRuby()
{
VALUE MRuby = rb_define_module("MyRuby");
rb_define_singleton_method(MRuby, "cFunction", cFunction, 1);
}
Ниже приведен код сценария ruby.это вызывает метод cFuncton () путем pssing форматированной строки printf, как показано ниже:
require 'cFile'
MyRuby::cFunction(expObject, "My Message:: %s, My Value:: %d", "Hi Im here", 100 )
с вышеприведенной пробной версией 1, мы не получим никакой отдачи, в то время как с пробной 2 мы получим пустую строку.Поэтому любой может предложить, как решить вышеуказанную проблему и получить ожидаемый результат, как показано ниже: Мое сообщение :: Привет, я здесь, Мое значение :: 100. Заранее спасибо.