我知道這是相當基本的,但我仍然堅持。 所以我有一個需要參加一個變量n的函數,所以這是我的主要功能傳遞參數到主
int main(int argc, char* argv){
sort(argv[1]);
}
我打電話像這樣的程序:
./sort 4 <text.txt
但4號犯規得到認可或通過該功能。我究竟做錯了什麼?我知道argv [0]應該保存程序本身的名稱,並且每個從那裏開始都應該保存參數。
我知道這是相當基本的,但我仍然堅持。 所以我有一個需要參加一個變量n的函數,所以這是我的主要功能傳遞參數到主
int main(int argc, char* argv){
sort(argv[1]);
}
我打電話像這樣的程序:
./sort 4 <text.txt
但4號犯規得到認可或通過該功能。我究竟做錯了什麼?我知道argv [0]應該保存程序本身的名稱,並且每個從那裏開始都應該保存參數。
您應該嘗試全部打印。
#include <stdio.h>
int main(int argc, const char *argv[])
{
int i = 0;
for (; i < argc; ++i) {
printf("argv[%d] = '%s'\n", i, argv[i]);
}
return 0;
}
運行與./a.out 4 < /somefile
代碼給我:
argv[0] = './a.out'
argv[1] = '4'
最終,你必須要記住,「4」是一個指向字符數組,你可能必須分析它成一個整數。
我仍然感到困惑,您發佈的代碼段顯示正確的參數,但它仍然沒有正確傳遞到函數。這是爲什麼?爲什麼不排序(argv [1])工作? – user1161080 2012-02-11 17:57:09
也許你應該添加sort()的代碼。 – Rickard 2012-02-11 18:07:57
@JonathanLeffler這裏'./a.out 4 somefile'應該將'somefile'的內容讀入'argv'對嗎? – overexchange 2017-01-16 23:59:04
char *argv
是不正確的。您傳遞了一個char*
(「字符串」)的數組,因此聲明main
的正確方法將是int main(int argc, char *argv[])
或等效地int main(int argc, char **argv)
(在後一種情況下,數組參數實際轉換爲指向數組的第一個元素的指針)。
在當前版本的代碼中檢索的內容是第二個char
,由環境重新解釋爲字符數組給出的參數指針數組中的第二個char
,這是完全不同的東西。
正如其他人所描述的那樣,您知道如何獲取所有參數,但不知道「< text.txt」。
這不是你的程序的參數,而是shell。這是輸入重定向,這意味着文件的輸入來自程序,就好像它來自stdin(鍵盤)一樣。
爲了防止這種情況,只需撥打你的程序是這樣的:
./sort 4 text.txt
我不知道什麼功能「排序」是,你在呼喚。
main的第二個參數是char ** argv或char * argv [],因爲它是一個字符串數組。 – 2012-02-11 17:45:50
哎呀我的錯誤。我修正了這個問題,但它仍然無效。 我正在調試它,argv [1]由於某種原因是0 .. – user1161080 2012-02-11 17:49:11
在類Unix系統上,'
2012-02-12 05:30:24