⑴ C語言程序的命令行參數
在許多應用軟體運行時都帶有命令行參數,其實這些命令行參數在C語言編寫的程序中也可以實現,靈活地運用命令行參數進行處理可以有效地提高程序的運行效率,收到事半功倍的效果。
C語言中有關命令行參數涉及到程序的主函數main(int argc,char *argv[]這樣兩個參數,其中,int argc表示命令行參數的個數(包括可執行程序名本身),char *argv[]表示每個參數的具體內容,argv[0]為命令行中可執行程序名本身,argv[1]為命令行中第二個參數的內容,依次類推。如下例輸出命令行參數的個數及參數的內容:
main (int argc,char *argv[],
{int I;
printf(
命令行中可執行文件名為:%s,argv[0]);
printf(
總共有%d個參數:,argc);
I=0;
while(argc>=1)
{printf(″%s ,argv[I++]);
argc--;}
}
命令行參數用的最多還是在諸如DIR A:等之類帶有盤符、路徑或文件名這樣的命令行中,所以說靈活處理這一類參數才能有效地提高程序的運行效果。譬如DIR命令,其後可以是盤符,可以是路徑,也可以是文件名,如何區分這一參數呢?請看下例(此程序模擬DIR命令,程序要求在命令行輸入一個參數:盤符或路徑或文件名,若無參數或參數多於一個都將取默認的參數「*.*」)。
*--------------------
功能:模擬DIR命令進行處理命令行參數
--------------------*/
#include
#include
#include
#inchlude
int j,num=0;
char ss[20],path[50],path2[50];
void main (int argc,char *argv[])
{
struct ffblk f;
int done;
if(argc==2) /*取命令行參數到數組中*/
strcpy(ss,argv[1]);
else
strcpy(ss,″*.*″); /*給數組賦值預設參數*/
if (((ss[strlen(ss)-1]==′\′||((ss[strlen(ss)-1]==':'))
strcat(ss,″*.*″); /*若參數為路徑或盤符,則加上″*.*″*/
getcwd(path1,50); /*取當前路徑*/
if (chdir(ss)==0) /*判斷參數是否為路徑*/
strcat(ss,\*.*); /*若路徑末沒有帶,則加上*.* */
chdir(path1); /*恢復原來路徑*/
strcpy(path2,ss);
⑵ 關於C語言的帶參數命令的運行。
/*加個#include<stdlib.h>
然後fopen後面第一個參數不用加雙引號,因為argv[]本身就是字元串,再加個雙引號就不倫不類了
修改後如下*/
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
FILE *fp1,*fp2;
char ch;
if((fp1=fopen(argv[1],"r"))==NULL){
printf("File open error! \n");
exit(0);
}
if((fp2=fopen(argv[2],"w"))==NULL){
printf("File open error! \n");
exit(0);
}
while((ch=fgetc(fp1))!=EOF){
if(ch>='a'&&ch<='z')
ch=ch-32;
fputc(ch,fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
//我驗證了一下可以了
⑶ 帶參數的C#命令行或者界面應用程序的調用
可以實現的,你應該有發現C#的main函數本身就是帶參數的,static
void
Main(string[]
args);你在程序中是可以利用這個參數的,比如:static
void
Main(string[]
args){
Console.WriteLine(args.Length);
if(args.Length>0)
{
Console.WriteLine(args[0]);
}}
然後你可以在cmd下面運行這個程序,假設你的程序編譯後為c:\text.exe
你就可以直接開始,運行cmd,然後c:\text.exe
test1
test2這樣的方式來運行,注意參數之間是以空格來分格的,就是你的test1
test2中間有個空格就會當做2個string。
你要是想在其他程序中來調用這個編譯好的程序的話,各種語言有自己不同的調用方式,比如C#調用的話可以利用Process類,VBA的話是VBA.CreateObject("wscript.shell")然後調用run("c:\text.exe"_test1_test2)之類的。
⑷ c語言命令行參數如何運行
1、命令行參數是保存在argv[]里的。argc只是說參數的個數。命令行參數一般是從argv[1]開始(包括argv[1])argv[0]是程序的名字。在輸命令的時候,命令行參數之間用空格隔開。
2、比如:
#include<stdio.h>
intmain(intargc,char*argv[])
{
if(argc<2)
{
printf("youmustinputargs!");
return0;
}
if(strcmp(argv[1],"help")==0)
{
printf("此程序參數如下: ");
printf("-c提示是否確定。 ");
printf("-d跳過警告,直接刪除。 ");
printf("exit為退出。");
return0;
}
elseif(strcmp(argv[1],"-c")==0)
{
//此處省略N行你的代碼
}
return0;
}
如果編譯出來的程序名字叫 test.exe,那麼在命令行下輸入 test.ext help後就會列印
此程序參數如下:
-c 提示是否確定。
-d 跳過警告,直接刪除。
exit為退出。
⑸ 如何用C語言實現帶參數的dos命令
需要使用帶參數的主函數來實現。
帶參數的主函數格式為:
int main(int argc, const char *argv[]);
其中argc為命令行參數的個數,包括可執行文件名。
argv為一個字元串數組,共計有argc個元素,依次為命令行輸入的各個參數。其中argv[0]為執行的文件名。
下面的程序可以列印出文件名及參數。
#include<stdio.h>
intmain(intargc,constchar*argv[])//定義帶參數的主函數
{
inti;
printf("執行文件名為:%s ",argv[0]);//列印可執行文件名
printf("有%d個參數: ",argc-1);//列印其它參數個數。
for(i=1;i<argc;i++)
{
printf("參數%d=%s ",i,argv[i]);//列印所有參數值。
}
return0;
}
輸入:
test.exep1 p2 333 44
輸出:
執行文件名為:test.exe
有4個參數:
參數1 = p1
參數2 = p2
參數3 = 333
參數4 = 44
⑹ C語言命令行參數
int main(int argc, char * argv[])
{
.....
}
argc: 代表啟動程序時,命令行參數的個數。C和C++語言規定,可執行程序程序本身的文件名,也算是一個命令行參數,因此,argc的值至少是1.
argv[]:指針數組,其中的每個元素都是一個char* 類型的指針,該指針指向一個字元串,這個字元串里就存放著命令行參數。
例如,argv[0]指向的字元串就是第一個命令行參數,即可執行程序的文件名,argv[1]指向第二個命令行參數,argv[2]指向第三個命令行參數....。
#include <stdio.h>
int main( int argc, char * argv[])
{
int i;
for ( i = 0;i < argc; i++)
{
printf("%s ",argv[i]);
}
return 0;
}
windows下,將上面的程序編譯成sample.exe,然後在控制台窗口敲:
sample para1 para2 s.txt 5 "hello world"
上面有6個參數,雙引號為了包含空格作為一個參數。
輸出結果:
sample
para1
para2
s.txt
5
hello world
main函數通常含有參數argc和argv,寫法通常如下:
int main(int argc,char *argv[])
int main(int argc,char **argv)
程序:
#include<stdio.h>
int main(int argc,char *argv[])
{
int i;
for(i=0;i<argc;i++)
printf("第 %d 個參數是 %s ",i+1,argv[i]);
return 0;
}
⑺ c語言編程中如何實現命令參數
在命令行參數中,程序名本身也算是一個,而且是argv[0],如果你用一個參數比如1調用這個程序,你的第一個參數就表示是argv[1],
然後有一個空串argv[2]是null結束整個命令行,空串結束是一種程序調用的機制,作用就是為了使得程序有一種便捷的方式計算整個命令行參數的個數和遍歷這個字元串數組
對於你的程序aaa
1
argv[0]
=
"aaa";
argv[1]
=
"1";
argv[2]
=
NULL;
對於你的程序aaa
b
argv[0]
=
"aaa";
argv[1]
=
"b";
argv[2]
=
NULL;
第二個程序中
if
(argv[2]
==
"d")
有錯誤
參數是以字元串傳入程序的,你應該strcmp(argv[1],"b")
==
0而且你的參數表示位置有問題因該是argv[1](它是第一個參數)
第一個程序中if
(argv[2]
==
"1")
也是錯誤的
最後在簡要的說一下,如果你要判斷當前程序的命令行的個數是否為某一值,例如你想判斷是否有2個參數被傳入aaa程序,可以這么寫
if
(argc
==
3)
{
/*...*/}
/*不好意思第一次回答的時候argc
==
2記算錯了,對於兩個參數的個數記數因該是
程序名
參數1
參數2
(null)位置是0,1,2,3
*/
有很多初學者對於參數的個數計算方面往往比較疑惑,曾經我也是
⑻ 關於C語言的帶參數命令的運行。
if((fp1=fopen(argv[1],"r"))==NULL){
printf("File open error! \n");
exit(0);
}
if((fp2=fopen(argv[2],"w"))==NULL){
printf("File open error! \n");
exit(0);
}