今天搞到一個需要傳入參數的程序時,對於argc和argv的含義一直不清楚,查了查終於搞懂。~
首先看下百科的說法吧。
argc,argv 用命令行編譯程序時有用。
主函數main中變量(int argc,char *argv[ ])的含義
有些編譯器允許將main()的返回類型聲明爲void,這已不再是合法的C++
main(int argc, char *argv[ ], char **env[ ])纔是UNIX和Linux中的標準寫法。
argc: 整數,用來統計你運行程序時送給main函數的命令行參數的個數
* argv[ ]: 字符串數組,用來存放指向你的字符串參數的指針數組,每一個元素指向一個參數
argv[0] 指向程序運行的全路徑名
argv[1] 指向在DOS命令行中執行程序名後的第一個字符串
argv[2] 指向執行程序名後的第二個字符串
...
argv[argc]爲NULL。
**env:字符串數組。env[ ]的每一個元素都包含ENVVAR=value形式的字符
串。其中ENVVAR爲環境變量,value 爲ENVVAR的對應值。
argc, argv,env是在main( )函數之前被賦值的,編譯器生成的可執行文件,main(
)不是真正的入口點,而是一個標準的函數,這個函數名與具體的操作系統有關。
既如此,寫個測試代碼看看咯。
-
<span style="font-size:18px">#include <stdio.h>
-
int main(int argc, char *argv[ ])
-
{
-
printf("%d\n",argc);
-
while(argc)
-
printf("%s\n",argv[--argc]);
-
return 0;
-
}</span>
輸出結果如下:
可以看到,argv[0]是./test,後面的分別爲輸入的參數。
測試2,傳入一個文件名,利用這個文件名創建一個新的文件。
excel進程代碼如下:
-
#include <unistd.h>
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
-
-
-
int main(int argc,char *argv[])
-
{
-
-
if(argc<2)
-
{
-
perror("you haven,t input the filename,please try again!\n");
-
exit(EXIT_FAILURE);
-
-
}
-
while(argc)
-
printf("%s\n",argv[--argc]);
-
printf("leaving execl now\n");
-
-
-
if(execl("./file_creat","file_creat",argv[1],NULL)<0)
-
perror("execl error!");
-
printf("entering execl now\n");
-
}
創建文件進程代碼如下:
-
#include <stdio.h>
-
-
#include <stdlib.h>
-
-
#include <sys/types.h>
-
-
#include <sys/stat.h>
-
-
#include <fcntl.h>
-
-
-
-
void create_file(char *filename)
-
-
{
-
-
-
-
if(creat(filename,0666)<0)
-
-
{
-
-
printf("create file %s failure!\n",filename);
-
-
exit(EXIT_FAILURE);
-
-
}
-
-
else
-
-
{
-
-
printf("create file %s success!\n",filename);
-
-
}
-
-
}
-
-
-
-
-
-
-
-
-
-
int main(int argc,char *argv[])
-
-
{
-
-
-
printf("entering file_creat now\n");
-
-
if(argc<2)
-
-
{
-
-
printf("you haven't input the filename,please try again!\n");
-
-
exit(EXIT_FAILURE);
-
-
}
-
-
create_file(argv[1]);
-
-
printf("leaving file_creat now\n");
-
-
exit(EXIT_SUCCESS);
-
-
}
運行結果如下
可以看到首先打印出argv的內容,argv[0]爲./excel,第二個爲傳入文件名,並利用傳入的文件名創建一個文件。
可以看到多了一個mytest文件。