簡體   English   中英

命令行參數:argv

[英]Command line arguments: argv

我想知道為什么argv數組可以在以下代碼中包含多字符元素:

#include <iostream>

int main(int argc, char *argv[])
{
  for (int nArg = 0; nArg < argc; nArg++)
  {
    cout << nArg << " " << argv[nArg] << endl;
  }

  return 0;
}

該代碼僅打印出傳遞給程序的所有參數。

當我使用參數foobar運行程序時, argv[1]fooargv[2]bar

但是argvchar的數組。 foo不是char ,而是一個字符串。 argv[0]如何成為foo

argv實際上是一個指針,而不是數組。 在C和C ++中,函數參數不能為數組。 如果它看起來像一個數組,則在編譯時會悄悄地對其進行“調整”,使其成為指向數組元素類型的指針。

這個:

int main(int argc, char *argv[])

真正的意思是:

int main(int argc, char **argv)

當您的程序被調用時, argv將被初始化為指向char*對象。 該對象是char*指針數組的初始元素,每個char*指針指向一個字符串(字符串的初始元素),但最后一個元素argv[argc]包含空指針。

argv[0]是指向表示程序名稱的字符串的指針。 如果使用兩個參數調用程序,則argv[1]argv[2]將指向這些參數。

最后,如果使用std::cout << ...打印一個char*值,它將打印而不是指針值本身,而是它指向的字符串的值。

當我使用參數 foobar運行程序時, argv[0]fooargv[1]bar

您確定嗎? (更新:這是問題的錯字,現已糾正。)如果您的程序名為“ my_program”,則my_program foo bar的輸出應類似於以下內容:

0 my_program
1 foo
2 bar

但是argvchar的數組。

更正:它是char *的數組。 "foo"是一個char * ,因此可以使用。

char數組是char argv[]
char *的數組是char *argv[] 那就是你所擁有的。

argv [0]是foo而argv [1]是bar ...

您應注意, argv[0]總是收到從外殼調用的實際程序名稱,因此您的命令行參數從argv[1]

你只是一個人。

但是argvchar的數組。

不是。 它是一個char指針數組,這些指針指向(零終止) char數組,即C風格的字符串。

從技術上講, argv不是數組,而是指向數組的指針(包含char指針的數組)。 有關更多詳細信息,請參見Keith Thompson對John Kugelman的回答的評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM