當前位置:首頁 » 編程語言 » c語言顯示所有命令行參數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言顯示所有命令行參數

發布時間: 2023-03-17 20:09:02

『壹』 編寫一個帶參數的main函數(用c語言編寫),要求倒序輸出所有命令行參數,例如:命令行輸入 ./your_progra

#include 「stdio.h"

int main(int argc, char* argv[])
{
for (int i = argc-1; i > 0; i --)
{
printf( "鎮慶%s ", argv[i] );
}
printf( "大旅桐滾坦\n" );
return 0;
}

『貳』 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的命令行參數

所謂c語言的命令行參數,主要指的main函數的參數,main函數有操作系統來調用,用戶通巧弊過操作系統來運行軟體,因此可以傳遞參數。比如

intmain(intargc,char*argv[])//這是控制台上的main函數

其咐寬薯中argc用於說明傳遞的命令行參數的個數衡者,argv是一個char *的指針數組,每1個元素代表一個參數。其中argv[0]即表示程序本身。

『肆』 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語言中,求寫一個主函數,列印所有命令行參數!命令不輸出!

int main(int argc, char* argv[])
{
int i;
for(i=1; i <旅桐 argc; i++)
printf("%s\瞎鎮毀n"磨備, argv[i]);
return 0;
}

『陸』 c語言如何利用命令行參數反序顯示命令行參數的單詞呢


#include <stdio.h>


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

{ int i = 0;


if (argc < 2)

{ printf("Usage: %s words ", argv[0]);

}

else

{ printf("Words: ");

for (i = 1; i < argc; i++)

碧伍 { printf("%s ", argv[i]);

鋒嫌 }

printf(" Reversing printing is: ");

for (i = argc - 1; i > 0; i--)

銀慧手 { printf("%s ", argv[i]);

}

putchar(' ');

}


return 0;

}

程序沒有問題。它要在CMD窗口中運行。

『柒』 Linux下怎麼用C語言實現:原樣輸出命令行上所有的參數用read/write從終端上讀入並寫回終端

你說的是APUE上的很經典的一個例子
源代碼如下:
#include <stdio.h>賣虧配
#include <stdlib.h>
#include <unistd.h>

#define BUFFSIZE 4096

int main(void)
{
int n;
char buf[BUFFSIZE];
while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) >空梁 0)
{
if (write(STDOUT_FILENO, buf, n) != n)
{
perror("write error");
exit(1);
}
}
if (n < 0)
{
perror("read error");
exit(1);
}
exit(0);
}

較原來的作了中指少許改動,這種代碼應該能讀懂吧。

『捌』 高手求教!!!c語言中怎樣讀取命令行參數

把main函數聲明為int main(int argc,char *argv[])
argc 是參數的個數
如:
int main(int argc,char *argv[])
{
printf("虧稿%s",argv[1]);
}
這是一個簡單的未做錯誤判斷的echo函數,將上面的源程序編鬧瞎譯連接為echo.exe,然後在命令提示符下輸入echo hello
這樣,液空空argc=2,argv[0]為echo,argv[1]為hello

我沒用過linux,不知道上面的回答有沒有對上意思。

『玖』 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

(9)c語言顯示所有命令行參數擴展閱讀:

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語言如何獲得命令行參數

C語言獲得命令行參數的方法 每當你運行一個DOS或Windows程序時,都會生成一個程序段前綴(Program SegmentPrefix,簡稱PSP)。當DOS程序的裝入程序把程序復制到RAM中來執行時,信謹它先把256個位元組分配給PSP,然後把可執行代碼復制到緊接著PSP的內存區域中。PSP中包含了DOS為了執行一個程序所需要的各種各樣的信息,其中的一部分數據就是命令行。PSP中偏移量為128的那個位元組中存放著命令行中的字元個數,接下來的127個位元組中存放著命令行本身。這也正是DOS把你能在其提示行中輸入的字元個數限制在127個之內的原因——因為它為命令行分配的存儲空間只有那麼多。遺憾的是,PSP的命令行緩沖區中並沒有存放可執行程序的名字——而只存放著在可執行程序名後鍵入的字元(包括空格符)。例如,如果你在DOS提示行中鍵入以下命令: XCOPY AUTOEXEC.BAT AUTOEXEC.BAK 假設XCOPY.EXE存放在c驅動器的DOS目錄下,則李坦薯XCOPY.EXE的PSP命令行緩沖區中將包含以下信息: AUTOEXEC.BAT AUTOEXEC.BAK 注意,命令行中緊接著"XCOPY"的空格符也被復制到PSP的緩沖區中。 除了不能在PSP中找到可執行程序名外,PSP還有一個不足之處——在命令行中能看到的對於輸出或輸入的重定向,在PSP的命令行緩沖區中是無法看到的,也就是說,你無法從PSP中得知你的程序是否被重定向過。 到現在為止,你應該熟悉在C程序中可以通過argc和argv來獲取一些有關信息,但是,這些信息是怎樣從DOS的裝入程序傳給argv指針的呢?這是由程序的啟動代碼來完成的。啟動代碼在main()函數的第一行代碼之前被執行,在其執行期間,它調用一個名為__setargv()的函數,把程序名和命令行從PSP和DOS環境中復制到mai『n()函數的argv指針所指向的緩沖區中。你可以在xLIBCE.LIB文件中找到_setargv()函數,對於Small,Medium和Large這三種存儲模式,這里的「x」分別為「S」,「M」和「L」。在生成可執行程序時,上述庫文件會自動被連接進來。除了復制argv參數的內容外,c的啟動代碼還要完成其它一些工作。當啟動代碼執行完畢後,main()函數中的代碼就開始執行了。 在DOS中的情況是這樣的,那麼在Windows中的情況又是怎樣的呢?實際上,在Windows中的情況大致上和在DOS中的一樣。當執行一個Windows程序時,與DOS的裝入程序一樣哪者,Windows的裝入程序也會建立一個PSP,其中包含了與DOS的PSP中相同的信息。主要的區別是此時命令行被復制到lpszCmdLine參數中,它是WinMain()函數的參數表中的第三個(也是倒數第二個)參數。在Windows C的xLIBCEW.LIB庫文件中包含了啟動函數setargv(),它負責把命令行信息復制到lpszCmdLine緩沖區中。同樣,這里的「x」也表示程序所使用的存儲模式。在Quick c中,函數_setargv()包含在庫文件xLIBCEWQ.LIB中。 盡管DOS程序和Windows程序的命令行信息的管理方式基本相同,但是傳給你的C程序的命令行的格式在安排上稍有不同。在DOS中,啟動代碼獲得以空格符為分隔符的命令行後,就把每個參數轉換為其自身的以NULL為終止符的字元串。因此,你可把argv原型化為一個指針數組(char* argv[]),並通過從O到n這些下標值來訪問每個參數,其中n等於命令行中的參數個數減去1。你也可以把argv原型化為一個指向指針的指針(char **argv),並通過增減argv的值來訪問每一個參數。 在Windows中,傳給c程序的命令行是一個LPSTR類型或char_far*類型,其中的每一個參數都用空格符隔開,就象你在DOS提示行中鍵入這些字元後所看到的那樣(實際上,在Windows中不可能真正鍵入這些字元,而是通過雙擊應用程序圖標這樣的方式來啟動一個程序)。為了訪問Windows命令行中的各個參數,你必須人工地訪問lpszCmdLine所指向的存儲區,並分隔存放在該處的參數,或者使用strtok()這樣的函數,每次處理一個參數。 如果你富於探索精神,你可以仔細地研究PSP本身,並從中獲取命令行信息。為此,你可以像下面這樣來使用DOS中斷21H(此處使用Microsoft C): # include <stdio. h # incIude <dos. h main(int argc,char **argv){union REGS regs ; / * DOS register access struct * / char far * pspPtr; / * pointer to PSP * / int cmdLineCnt; / *num of chars in cmd line * / regs. h. ah=0x62; /*use DOS interrupt 62 *; int86(0x21 ,&regs,&egs) ; / *call DOS * / FP-SEG(pspPtr) =regs. x. bx ; / *save PSP segment * / FP_OFF(pspPtr)=0xS0; / * set pointer offset * / / * * pspPtr now points to the command-line count byte * / cmdLineCnt== * pspPtr ; 需要注意的是,在Small存儲模式下,或者在只有一個代碼段的匯編程序中,由DOS返回到BX寄存器中的值就是程序代碼段的地址值;在Large模式的c程序中,或者在多個代碼段的匯編程序中,所返回的值是程序中包含PSP的那個代碼段的段地址值。如果你已經建立了一個指向這個數據的指針,你就可以在程序中使用這個數據了。 今天,通常你可以認為你的程序可以使用命令行參數。但是,在DOS 2.O版以前,存儲在PSP中的命令行信息與現在稍有不同(它不能從命令行中分離出輸入或輸出重定向數據),而 且由argv[O]所指向的數據中並不一定包含可執行程序的路徑名。直到DOS發展到3.o版,它才提供了(或者說至少公開了)用來檢索PSP的中斷62H。因此,你至少可以認為,在運行DOS3.0或更高版本的PC上,你的程序總是可以獲得命令行參數的。 如果你的程序運行在DOS 3.0或更高的版本下,你基本上就可以任意處理命令行參數了,因為這些信息已存入棧中供你使用。顯然,適用於棧中數據的常規的數據操作規則同樣也適用於存入棧中的命令行參數。然而,如果你的編譯程序不提供argv參數,例如當你用匯編語言或者某種不提供argv參數的編譯程序編寫程序時,真正的問題就出現了。在這種情況下,你將不得不自己找出檢索命令行參數的方法,而使用DOS中斷62H就是一種很方便的方法。 如果你要用DOS中斷62H來檢索指向命令行的指針,你必須明白該指針所指向的數據是供DOS使用的,並且正在被DOS使用。盡管你可以檢索這些數據,但你不可以改變它們。如果在程序中需要隨時根據命令行參數作出決定,那麼在使用這些數據之前應該先把它們復制到一個局部緩沖區中,這樣就可以隨意處理這些數據,而不用擔心會與DOS發生沖突了。實際上,這種技巧同樣適用於帶argv參數的c程序。位於main()函數之外的函數需要使用命令行參數的情況並不少見,為了使這些函數能引用這些數據,main()函數必須把這些數據存為全局型,或者通過(再次)入棧把它們傳遞給需要使用它們的函數。