那些年讓我費解的第一行代碼
前言
今天就說一個問題 main.m中的參數是什么意思?
我分兩個部分來說明
- 終端打印單個參數說明
- 怎么去自己定義
一、終端的打印驗證
在這里我先說一些簡單的問題, char *argv[]。argv是一個數組, 數組的每一個元素都是一個指針, 每個指針都保存字符的地址。如果你是初學者可以去看一些復合指針的確認。
code - Prameter.c
int main(int argc, const char *argv[]){
printf("argc = %d\n", argc);
printf("Hello, world!\n");
return 0;
}
結果
argc = 1
Hello, world!
在終端執行的使用使用了命令
gou:C gouyuankai$ cc Prameter.c
gou:C gouyuankai$ ./a.out
a.out 是程序的可執行文件, 這個用命令調用的時候沒有用到其他參數。所以只有一個命令參數。打印1.所以argc 表示命令參數個數
例如我們經常使用的:
cp 源路徑 目標路徑
這里有三個參數, argc就是3. 源路徑和目標路徑是兩個參數, 傳入程序的char *argv[]數組中保存。如果不是很好理解的話看看下邊的例子吧。
二、寫一個自己的命令
比如我要使用命令行自己寫一個命令
YKCopy a.txt b.txt
實現a.txt 中的內容拷貝到b.txt中
那么YKCopy就是這個可執行文件名字, 相當與平時的a.out
我直接上代碼:
Code
int main(int argc, const char* argv[]){
//獲得兩個路徑
const char *src = argv[1];
printf("%s\n", src);
const char *dest = argv[2];
printf("%s\n", dest);
//1讀取源路徑
FILE *fpr = fopen(src, "r");
if(fpr==NULL) printf("error");
FILE *fpw = fopen(dest, "w");
char ret;
//2.拷貝
while((ret = fgetc(fpr)) != EOF){
fputc(ret, fpw);
}
fclose(fpr);
fclose(fpw);
}
命令行執行順序