从C main()程序返回字符串的机制

时间:2010-11-14 18:12:39

标签: c

我知道C程序通常以return结束,我们返回程序的状态。 但是,我想返回一个字符串。原因是,我将从shell脚本调用C-executable并打印返回的字符串。 有没有相同的机制?

7 个答案:

答案 0 :(得分:10)

没有这样的机制;返回码应该是一个字节。如果要从程序中输出字符串,请使用printf()之类的命令和shell脚本中的命令替换来捕获它。

答案 1 :(得分:7)

你不能。

你能做的最好的事情就是在某处写字符串(标准输出,标准错误或某些文件);那么shellscript会从那里得到你的字符串。

标准输出(因此仅使用printf)可能是最好的解决方案,因为从C程序打印字符串非常容易,而且shellcript很容易获得该数据:

来自shell脚本:

STRING="$( ./your_program argv1 argv2 )"

答案 2 :(得分:5)

无法从main()返回字符串。也许程序本身应该打印字符串?

答案 3 :(得分:4)

只需使用printf输出要返回标准输出的字符串。然后在您的脚本中,执行以下操作:

SOMESTRING="`./yourprogram`"

反引号将捕获程序的输出,这将是您打印的字符串。

答案 4 :(得分:1)

你不能,但你也不需要。您从main返回一个统计代码,但您始终可以重新定向输出并将其捕获到shell脚本中。

答案 5 :(得分:0)

你不能 - 你只能返回一个整数。

请记住,C是与Unix一起开发的。 Unix程序返回一个整数值,用作状态代码。如果一个程序要返回字符串,它会将它们写入stdout,然后用户(或脚本)将它传递给有用的东西。

MS DOS也只有数字状态值。

答案 6 :(得分:0)

您必须将字符串打印到stdout并使用shell的命令替换来读取结果:

"`command`"

或:

"$(command)"

无论哪种方式,您都应该使用如上所述的封闭双引号。请注意,此方法存在一个潜在的严重问题,即它会从命令的输出中删除所有训练换行符。如果您需要保留确切的输出,请尝试:

output="$(command ; echo x)"
output="${output%x}"

由于OP提到这是一个密码,另一条建议是:一旦你将密码读入shell变量,永远不会在命令行上将它传递给其他程序。命令行通常是世界可读的。而不是像

那样的东西
wget "http://$user:$pass@host/foo"

尝试类似

的内容
wget -i - << EOF
http://$user:$pass@host/foo
EOF

此示例中的文件对于许多需要从脚本中获取密码的程序非常有用。