【问题标题】:Argument treatment at command line in CC中命令行的参数处理
【发布时间】:2013-06-24 03:34:45
【问题描述】:

问我的问题是,即使我们在命令提示符下提供整数/浮点参数,它们在 C 语言中仍被视为字符串或不被视为字符串。我不确定这是否有任何帮助。这在 C 语言中是否正确,为什么?那么其他的像 Java 或 python 呢?

【问题讨论】:

  • 是的,你可以使用 atoi 转换为 int,等等
  • 如果您的程序采用以下参数float, int, string, float,您将如何建议以跨所有编程语言的标准和通用方式将它们传递给您的程序?你可以让它们成为结构,但最终会遇到比其价值更多的问题。将它们作为字符串传递是最通用和最不起眼的方式。

标签: c operating-system command-line-arguments


【解决方案1】:

确实,与语言无关,Unix 上程序的命令行参数是字符串。如果程序选择将它们解释为数字,那很好,但这是因为程序(或程序员)选择这样做。类似地,一种语言的运行时支持可能会将 o/s 传递的参数更改为整数或浮点类型,但 o/s 将字符串传递给该运行时(我知道没有一种语言可以做到这一点,但我不主张了解所有语言)。

要看到这一点,请注意执行程序的方法是 exec*() 系列函数,每个函数都接受一个字符串,该字符串是要执行的程序的名称,以及一个字符串数组,它们是要传递给程序的参数。诸如system()popen() 之类的函数是在exec*() 系列函数的基础上构建的——当然,它们也使用fork()。甚至posix_spawn() 函数也需要一个指向字符串的指针数组作为生成程序的参数。

【讨论】:

    【解决方案2】:

    这与邮寄没有信封的信没有什么不同。我们都同意使用称为信封的通用外壳。操作系统使用称为字符串的通用项将参数传递给程序。了解程序想要对参数做什么超出了操作系统的范围。

    有一些例外,我想到的就是将参数传递给 Linux 内核模块。这些可以作为字符串以外的项目传递。

    【讨论】:

      【解决方案3】:

      基本上,这是在操作系统和程序之间创建接口的问题。 任何程序。请记住,程序并不总是用 C 编写的,而且您甚至不知道该语言中是否有 floatint 之类的东西。

      您希望能够传递多个参数(使用自然分隔符),这些参数可以轻松编码任意信息。在 C 中,字符串可以是任意长度,唯一的限制是字符串中的零字节表示字符串的结尾。这是向程序传递任意信息的一种高度灵活且自然的方式。

      因此,您永远不能直接向程序提供任意整数/浮点参数;操作系统(Unix / Linux / Windows / 等)不会让你。您没有任何工具可以为您提供该界面,就像您无法将鼠标单击作为参数传递一样。你提供的只是一个字符序列。

      由于 Unix 和 C 是一起设计的,它也是 C 编程语言的一部分,并且从那里它进入了 C++、Java、Python 和大多数其他现代编程语言,并以同样的方式进入了 Linux、Windows 和大多数其他操作系统。

      【讨论】:

        猜你喜欢
        • 2023-04-03
        • 2013-05-08
        • 2012-11-25
        • 2014-01-13
        • 2015-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多