【问题标题】:C passing other c program as main argvC 将其他 c 程序作为主 argv 传递
【发布时间】:2017-02-15 16:40:17
【问题描述】:

只是好奇,

考虑到我有

./第一

./秒

它们是可执行的 c 程序

first.c:

char main(void){
    return '5';
}

second.c:

#include<stdio.h>
int main(int argc, char** argv){
    printf("%s", argv[2]);
    return 0;
}

(我想在这里打印 5)

是否可以像这样编译 second.c:

gcc second.c -./first

我当然知道那行不通,但有没有可能写出我想要的东西?

【问题讨论】:

  • char main(void) 你从哪里得到的?
  • 你正在你的 shell 中寻找管道操作符(或$()
  • @SouravGhosh 我知道这是非常错误的,但为了表达我的想法,我使用了 char main(void) 因为我想使用其他 c 程序的返回值。
  • 删除first.c,将函数重命名为char * non_main(void)并在second.c中调用,最不麻烦的方式。
  • 您可以使用标准的int main(...),因为'5'int 表达式,正如printf("%zu\n", sizeof('5')); 所揭示的那样。

标签: c shell gcc arguments


【解决方案1】:

main()的返回值成为程序的退出状态,放入shell的$?变量中。所以应该是:

./first
./second $?

您应该更改first.c 以返回int,而不是char;否则它将打印'5' 字符的ASCII 码,而不是5

int main(void){
    return 5;
}

second.c 中,应该是argc[1],而不是argv[2]

【讨论】:

  • 那么 $?已完成的最新程序的退出状态。谢谢
【解决方案2】:

让第一个程序打印“5”:

int main(void){
    printf("5\n");
    return 0;
}

然后你可以在shell中使用反引号把这个程序的输出放到另一个的参数中:

./second `./first`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2014-07-24
    相关资源
    最近更新 更多