【问题标题】:Direct shell input as C program argument直接 shell 输入作为 C 程序参数
【发布时间】:2014-04-05 00:18:11
【问题描述】:

假设我有一个 C 程序,它的函数声明是 void square(int n),(它也已定义)它所做的一切都是 printf n 的平方值。我希望能够像这样从 bash shell 运行它:square 5,其中 5 是 C 程序的输入。

我该怎么做呢?我已经研究过使用getoptread,我已经多次阅读手册页并观看了一些getopt 教程,但我似乎无法找到一种方法来做到这一点。我找不到在示例中不使用标志的getopt 示例,因此我不知道如何将其应用于简单的整数输入。谁能与我分享如何做到这一点?我真的很感激。

【问题讨论】:

  • 对于简单的单个参数不需要 getopt。你只需要 argv/argc:crasseux.com/books/ctutorial/argc-and-argv.html
  • @MarcB 该链接非常有帮助!它为我清除了很多关于 argc 和 argv 的东西,我还是 C 的初学者,所以我很欣赏你在那里链接的简洁信息^^

标签: c bash shell stdin


【解决方案1】:

如果您没有任何其他需要处理的命令行选项,getopt 可能是矫枉过正。您只需从argv 读取值:

int main(int argc, char *argv[])
{
    int n;

    // need "2 args" because the program's name counts as 1
    if (argc != 2)
    {
        fprintf(stderr, "usage: square <n>\n");
        return -1;
    }

    // convert the first argument, argv[1], from string to int;
    // see note below about using strtol() instead
    n = atoi(argv[1]);

    square(n);

    return 0;
}

更好的解决方案是use strtol() instead of atoi() 以检查转换是否有效。

【讨论】:

  • 你会像 shell square 5 这样从脚本中调用它,对吧?
  • @FiddlingBits 如果程序在当前目录中编译为名为@9​​87654328@ 的可执行文件,那么您只需要运行(从提示符或shell 脚本)是./square 5
  • @dvnrrs 该代码块不仅有效,而且您的 cmets 还帮助向我解释了很多,感谢您的帮助!我一定会查看 strtol() 的手册页,并尝试用它为我自己的实践制定一个替代解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多