- 此问题在此处已有答案**:
12年前就关闭了。
- 可能重复:**
What are the arguments to main() for?
What does int argc, char *argv[] mean?
每个程序都从main(int argc, char *argv[])
定义开始。
我不明白这是什么意思,如果有人能解释一下为什么我们要用这些参数,如果我们不在程序中使用它们,我会很高兴的,为什么不:int main()
?
程序的名字是*argv[]
的元素之一吗?argc
是*argv[]
中参数个数的计数吗?还有哪些参数被发送到*argv[]
?我们如何发送它们?
8条答案
按热度按时间f3temu5u1#
x1m2 n1 a的参数
argc
和argv
被用作向程序发送参数的一种方式,可能最熟悉的方式是使用好的ol'终端,用户可以在那里输入cat file
。这里的单词cat
是一个程序,它接受一个文件并将其输出到标准输出(stdout
)。程序接收
argc
中的参数数和argv
中的参数向量,在上面的argumentccount将是2(程序名计为第一个参数),argumentv向量将包含[cat
,file
,null]。而最后一个元素是空指针。通常,您会这样写:
如果您的程序不需要任何参数,则按以下方式编写
main
-函数同样有效:在C语言的早期版本中,
main
之前没有int
,因为这是隐含的。今天,这被认为是一个错误。在POSIX兼容的系统(和Windows)上,可以使用第三个参数
char **envp
,它包含程序environment variables的向量。main
函数的参数列表还有其他变体,但由于它是非标准的,我在这里不做详细介绍。另外,变量的命名是一个 * 约定 *,没有实际意义。遵守这个约定总是一个好主意,这样就不会混淆其他变量,但是将
main
定义为对于你的第二个问题,有几种方法可以向程序发送参数,我建议你看看
exec*()
family of functions,它是POSIX标准,但是仅仅使用system
("command arg1 arg2")
可能更容易,但是使用system()
通常是不受欢迎的,因为它不能保证在每个系统上都能工作。但是如果没有bash
、zsh
或其他shell安装在 * NIX系统上,system()
将失败。aamkag612#
它们用于在调用程序时向程序传递参数,例如从命令行传递参数
上面的程序
mysort
是使用一些命令行参数执行的。因为有7个参数(计算程序),并且
下面是一个完整的示例。
[The
char
字符串“2”、“8”等可以使用某些字符到数字转换函数转换为数字,例如atol()
(link)]7kqas0il3#
使用
argc
(参数计数)和argv
(参数向量),您可以在应用程序启动时获得传递的参数的数量和值。这样,您就可以在应用程序启动时使用参数(如
-version
)来执行不同的操作。但是您也可以使用
int main(void)
作为C中的原型。还有第三个原型(不太为人所知,也不是标准的),它有第三个参数
envp
,包含环境变量。资源:
vjhs03f74#
argc
表示传递给程序的参数个数。char* argv[]
是传递的参数。argv[0]
总是程序名本身。我不是100%肯定,但我认为int main()
在C/C++中是有效的。tf7tbtn25#
argc
是在运行时提供给程序的命令行参数的数量,argv
是包含这些参数的字符数组(更确切地说,是C字符串数组),如果你知道你不需要命令行参数,你可以在接受void
参数时声明你的main:这是根据标准为
main
定义的仅有的两个原型,但是一些编译器也允许void
的返回类型。jaxagkaj6#
comp.lang.c FAQ处理以下问题
在Question 11.12a中。
uxhixvfz7#
argc
是命令行参数的数量,argv
是表示命令行参数的字符串数组。这给了你一个选项来响应传递给程序的参数,如果你不期望任何参数,你也可以使用
int main
。hmmo2u0o8#
您可以使用
app -something -somethingelse
等参数运行应用程序。int argc
表示这些参数的数量,char *argv[]
是一个数组,其中的实际参数将被传递到应用程序中。这样,您就可以在应用程序内部使用它们。