![](/img/trans.png)
[英]Use command line arguments argv[] to create data file with the same name
[英]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;
}
該代碼僅打印出傳遞給程序的所有參數。
當我使用參數foo
和bar
運行程序時, argv[1]
是foo
而argv[2]
是bar
。
但是argv
是char
的數組。 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*
值,它將打印而不是指針值本身,而是它指向的字符串的值。
當我使用參數foo
和bar
運行程序時,argv[0]
是foo
而argv[1]
是bar
。
您確定嗎?
(更新:這是問題的錯字,現已糾正。)如果您的程序名為“ my_program”,則my_program foo bar
的輸出應類似於以下內容:
0 my_program
1 foo
2 bar
但是
argv
是char
的數組。
更正:它是char *
的數組。 "foo"
是一個char *
,因此可以使用。
char
數組是char argv[]
。
char *
的數組是char *argv[]
。 那就是你所擁有的。
argv [0]是foo而argv [1]是bar ...
您應注意, argv[0]
總是收到從外殼調用的實際程序名稱,因此您的命令行參數從argv[1]
。
你只是一個人。
但是
argv
是char
的數組。
不是。 它是一個char
指針數組,這些指針指向(零終止) char
數組,即C風格的字符串。
從技術上講, argv
不是數組,而是指向數組的指針(包含char
指針的數組)。 有關更多詳細信息,請參見Keith Thompson對John Kugelman的回答的評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.