我在Windows上从Ruby脚本(Ruby 1.9.3)调用一个C程序(二进制,由Code:Blocks编译),但我很难将C程序的结果返回到脚本。我的C程序产生了两个整数,我想返回到脚本中,因为我不能返回两个整数。我把它们放在一个字符串中并返回,但当我运行脚本时,除了程序什么都不返回之外,一切都很好。
在再次阅读我的C程序后,我明白了当main被定义为int main()时,我试图返回一个字符串。我的问题是,我知道它不能是int main()以外的任何东西,但我需要得到这两个整数。
因此,目前我的方法是将结果封装在一个字符串(sprintf(output, "%i %i", i1, i2)
)中,然后返回(return output
),然后将该字符串存储在脚本中的一个变量中,并将该字符串切碎以获得整数,在Ruby中,这次是(string.split(/ /).collect!{|int| int.to_i}
)
我怎么能得到我想要做的?
感谢您的帮助
编辑:得到C程序输出的Ruby行是
results = `#{my_program_path} #{some_argument}`
我的C程序看起来像
int main()
{
char output[20];
sprintf(output, "%i %i", int1, int2);
return output;
}
C程序不能返回整数以外的任何值。我听说过的任何操作系统上的任何程序或脚本都不能返回除单个整数状态代码之外的任何其他代码。
你是如何阅读C程序的回报的?你是偶然读到输出的吗?如果是这样,您不想从main返回它,您想将它打印到标准输出。要执行此操作,请将sprintf(output, "%i %i", i1, i2)
替换为printf("%i %i", i1, i2)