【问题标题】:Have C return a string from main让 C 从 main 返回一个字符串
【发布时间】:2014-12-11 22:50:21
【问题描述】:

我在 Windows 上从 Ruby 脚本 (Ruby 1.9.3) 调用 C 程序(二进制,由 Code:Blocks 编译),但我在将 C 程序的结果返回到脚本时遇到了困难。 我的 C 程序产生 2 个整数,我想返回给脚本,因为我不能返回两个整数,所以我把它们放在一个字符串中并返回它,但是当我运行我的脚本时,一切正常,除了程序什么都不返回.

再次阅读我的 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 函数?在什么操作系统上,哪个编译器和编译标志,哪个版本的 Ruby?请显示更多代码,因此请编辑您的问题以改进它!显示一些 Ruby 调用代码和一些 C“调用”代码!
  • 你试过获取C程序的stdout吗?
  • 别忘了用gcc -Wall -g 编译。您的 C 代码存在严重缺陷。

标签: c return main


【解决方案1】:

C 程序只能返回整数。我听说过的任何操作系统上的任何程序或脚本都不能返回除单个整数状态码以外的任何内容。

您如何阅读您的 C 程序的回报?您是否偶然阅读了输出?如果是这样,您不想从 main 中返回它,而是想将其打印到标准输出。为此,请将您的 sprintf(output, "%i %i", i1, i2) 替换为 printf("%i %i", i1, i2)

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2014-07-14
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多