当实参传给main函数之后,argv的第一个元素指向程序的名字或者一个空字符串
前半句话我知道,主要是后半句话,argv[0]='0',这算啥?
首先你得知道进程的创建。
以 Windows 平台为例,标准是通过 CreateProcess 创建
CreateProcess MSDN: https://msdn.microsoft.com/zh-cn/library/ms682425(v=vs.85).aspx
BOOL WINAPI CreateProcess(
In_opt LPCTSTR lpApplicationName,
Inout_opt LPTSTR lpCommandLine,
In_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
In_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
In BOOL bInheritHandles,
In DWORD dwCreationFlags,
In_opt LPVOID lpEnvironment,
In_opt LPCTSTR lpCurrentDirectory,
In LPSTARTUPINFO lpStartupInfo,
Out LPPROCESS_INFORMATION lpProcessInformation
);
第一个参数是程序的绝对路径,第二个是命令行参数,如果第一个参数存在,而第二个为空,那么就出现 argv 为空了。
而 Linux 下,内部实现也主要是
int execle(const char path, const char arg , ..., char * const envp[]);
也就是 arg 为空了。
在 Windows 中,打开任务管理器,选取显示命令行参数,有很多系统进程是没有命令行参数的。
大多数情况下,至少有一个命令行参数是它本身。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。