C,C++中如何向main(int argc , char argv[])傳遞引數
C,C++中如何向main(int argc , char *argv[])傳遞引數
1.引言
在編寫C語言程式中,main函式入口常用的編寫格式為,這個也是我們最常用到的格式
int main()
{
.....
return 0;
}
本菜雞在做專案過程中,用到了一中帶引數的main函式,此篇文章進行解析。
2.一個最簡單的例子
作業系統:Win 10,IDE:VS2019
首先看一段最簡單的程式碼:
#include <stdio.h>
int main(int argc,char *argv[])
{
for (int i = 0; i < argc; i++)
{
printf(argv[i]);
printf("\t");
}
}
首先做一個解釋,main中傳入的兩個引數,argc代表傳入引數的個數, char *argv[]代表傳入的字串存放的 字元型指標陣列,該陣列的第一個元素預設存放程式所執行的exe的位置。
在vs2019中點選除錯,後臺執行結果如圖所示,
該列印輸出的是exe程式存放的位置,這是因為*argv[1]預設存放的是程式檔案的地址,而我們無法通過vs的除錯視窗給程式輸入引數,所以只能列印argv[1].
輸入引數只能通過windows的cmd命令視窗進行執行,開啟命令視窗,並切換到程式所在的資料夾,在後端輸入Project1.exe hello world,執行結果如下圖所示:
cmd中輸入Project1.exe代表代表執行這個可執行程式,引數為 hello world,由於hello和world中間用空格進行了間隔,程式會認為我們輸入了兩個引數,加主函式預設的地址,一共3個引數,這樣argc會自動賦值為3,argv[3]中就存放了3個字串,分別列印便得到了cmd中輸出的結果。
3.一個稍微複雜的例子
新建工程,我們在工程中寫了三個檔案,分別是led.h,led.c和start_stop.c,用來模擬對一個小燈的亮滅的控制過程。
led.h
#pragma once
#include <stdio.h>
void start();
void stop();
led.c
#include <stdio.h>
#include <string.h>
#include "led.h"
int main(int argc, char* argv[]);
int main(int argc, char* argv[])
{
if (strcmp(argv[1], "start") == 0)
{
start();
return 0;
}
if (strcmp(argv[1], "stop") == 0)
{
stop();
return 0;
}
//info();
return 0;
}
start_stop.c
#include "led.h"
void start()
{
printf("LED is on");
}
void stop()
{
printf("LED is off");
}
這個程式的意圖是,我們在cmd視窗中啟動該程式,使用者輸入start或者stop的文字就可以模擬控制LED小燈的開關,因為argv[0]字元指標預設指向的是程式的檔案地址,因此使用者輸入的內容被存放argv[1]指向的記憶體中,然後我們再通過對*argv[1]進行判斷,來執行相應的操作。本程式可以在vs中進行編譯,但是卻無法在vs中除錯執行,這是因為在vs中無法輸入引數,導致argv[1]會讀到不屬於自己的記憶體範圍,發生錯誤。
win+R,輸入cmd來到cmd視窗,切換到exe對應的目錄下,執行結果所示,
不屬於自己的記憶體範圍,發生錯誤。
win+R,輸入cmd來到cmd視窗,切換到exe對應的目錄下,執行結果所示,成功!
相關文章
- VS編譯器基礎 int main(int argc,char* argv[])編譯AIGC
- Main函式引數argc,argv如何傳入AI函式GC
- What does int argc, char* argv[] mean in C?(在c中,main函式引數的arc和arv有什麼用)GCAI函式
- linux中main引數傳遞LinuxAI
- C/C++中的引數傳遞方式C++
- C++引數的傳遞方式C++
- c++ -- 二維陣列引數傳遞C++陣列
- MyEclipse向main的引數傳值EclipseAI
- 你瞭解argc和argv嗎(以及在devc++中如何命令列傳參)GCdevC++命令列
- C++ main函式命令列引數使用C++AI函式命令列
- C#引數傳遞之值引數C#
- python指令碼傳引數argvPython指令碼
- java 中引數的傳遞Java
- react篇章-React 元件-向元件傳遞引數React元件
- 向路由元件傳遞引數2種方法路由元件
- dialog如何向其href指定的頁面傳遞引數?
- C++ 預設引數與引用傳遞:語法、用法及示例C++
- 引數傳遞
- OFBiz中的引數傳遞
- js中函式引數值傳遞和引用傳遞JS函式
- 使用strutstestcase如何在請求引數中傳遞物件...物件
- 可否在JSP中向applet傳遞多個引數?JSAPP
- C++中vector<int>& numsC++
- 如何計算PHP函式中傳遞的引數數量PHP函式
- C/C++中各種型別int、long、double、char表示範圍(最大最小值)C++型別
- c++單例模式、常量成員函式、引數傳遞、友元C++單例模式函式
- c++指標傳遞與引用傳遞C++指標
- C++中string、char *、char[]、const char*的轉換C++
- JNI傳遞引數
- Mybatis引數傳遞MyBatis
- C# 多執行緒引數傳遞C#執行緒
- C#頁面間的引數傳遞C#
- 向kernel module 傳遞引數(Passing Arugments to Kernel Module)
- Yii2 layout 由 controller 向layout中傳遞引數值Controller
- 【php安全】 register_argc_argv 造成的漏洞分析PHPGC
- C++ 可變引數模板遞迴展開C++遞迴
- C中int main()必須reture一個值嗎AI
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go