我已经实现了Ruby C扩展(即从ruby脚本调用C函数)以下是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);
}
以下是通过pssing printf格式化字符串调用cFuncton()方法的ruby脚本代码,如下所示:
require 'cFile'
MyRuby::cFunction(expObject, "My Message:: %s, My Value:: %d", "Hi Im here", 100 )
上面的试验第一次我们没有得到任何输出,而在试验第二次我们得到emplty字符串。那么任何人都可以建议如何解决上述问题并得到预期的输出如下: 我的留言::嗨我在这里,我的价值:: 100。 提前谢谢。
答案 0 :(得分:0)
您应该使用rb_scan_args来获取函数参数。它们不能直接传递给vsnprintf。
也许请尝试点击此处的示例:http://www.eqqon.com/index.php/Ruby_C_Extension_API_Documentation_(Ruby_1.8)