2013-06-23 116 views
1

问我的问题是,即使我们在命令提示符下提供了整数/浮点型参数,它们仍然被视为字符串或不以C语言处理。我不确定这可以帮助一点点。这是真的还是不是用C语言,为什么?其他人喜欢Java还是Python呢?C中命令行的参数处理

+0

是的,你可以使用atoi转换为int,等等 – aah134

+0

所以如果你的程序使用下面的参数'float,int,string,float'你会如何将它们传递给你的程序跨所有编程语言的标准和通用方式?你可以让它们变成结构,但最终会出现比它值得的更多的问题。以字符串形式传递它们是最普通和不引人注目的方式。 – nonsensickle

回答

0

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

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

所以你不能直接向程序提供任意的整数/浮点型参数;操作系统(Unix/Linux/Windows /等)不会让你。您没有任何工具可以为您提供该界面,与您无法将鼠标单击作为参数的方式相同。你所提供的是一系列字符。由于Unix和C一起设计,它也是C编程语言的一部分,从那里开始它向C++,Java,Python和大多数其他现代编程语言工作,并以相同的方式进入Linux,Windows和大多数其他操作系统。

2

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

要看到这一点,请注意执行程序的方法是exec*()系列函数,每个函数都需要一个字符串,它是要执行的程序的名称,以及一个字符串数组被传递给程序。 system()popen()等功能都建立在exec*()系列功能之上 - 当然,它们也使用fork()。即使是posix_spawn()函数也会获取指向该生成程序参数的字符串指针数组。

1

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

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