搜尋

首頁  >  問答  >  主體

c++ - ”argv的第一个元素指向一个空字符串“是什么意思?

当实参传给main函数之后,argv的第一个元素指向程序的名字或者一个空字符串

前半句话我知道,主要是后半句话,argv[0]='\0',这算啥?

PHPzPHPz2803 天前766

全部回覆(2)我來回復

  • ringa_lee

    ringa_lee2017-04-17 12:08:53

    argv[0] is the pointer to the initial character of a null-terminated multibyte strings that represents the name used to invoke the program itself (or, if this is not supported by the execution environment, argv[0][0] is guaranteed to be zero).

    http://en.cppreference.com/w/c/language/main_function

    argv[0] is the pointer to the initial character of a null-terminated multibyte strings that represents the name used to invoke the program itself (or an empty string "" if this is not supported by the execution environment).

    http://en.cppreference.com/w/cpp/language/main_function

    回覆
    0
  • 黄舟

    黄舟2017-04-17 12:08:53

    首先你得知道進程的創建。
    以 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 中,開啟工作管理員,選取顯示命令列參數,有很多系統進程是沒有命令列參數的。

    大多數情況下,至少有一個命令列參數是它本身。

    回覆
    0
  • 取消回覆