2012-02-11 63 views
1

我知道這是相當基本的,但我仍然堅持。 所以我有一個需要參加一個變量n的函數,所以這是我的主要功能傳遞參數到主

int main(int argc, char* argv){ 
    sort(argv[1]); 
    } 

我打電話像這樣的程序:

./sort 4 <text.txt 

但4號犯規得到認可或通過該功能。我究竟做錯了什麼?我知道argv [0]應該保存程序本身的名稱,並且每個從那裏開始都應該保存參數。

+0

main的第二個參數是char ** argv或char * argv [],因爲它是一個字符串數組。 – 2012-02-11 17:45:50

+0

哎呀我的錯誤。我修正了這個問題,但它仍然無效。 我正在調試它,argv [1]由於某種原因是0 .. – user1161080 2012-02-11 17:49:11

+0

在類Unix系統上,' 2012-02-12 05:30:24

回答

7

您應該嘗試全部打印。

#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」是一個指向字符數組,你可能必須分析它成一個整數。

+0

我仍然感到困惑,您發佈的代碼段顯示正確的參數,但它仍然沒有正確傳遞到函數。這是爲什麼?爲什麼不排序(argv [1])工作? – user1161080 2012-02-11 17:57:09

+0

也許你應該添加sort()的代碼。 – Rickard 2012-02-11 18:07:57

+0

@JonathanLeffler這裏'./a.out 4 overexchange 2017-01-16 23:59:04

3

char *argv是不正確的。您傳遞了一個char*(「字符串」)的數組,因此聲明main的正確方法將是int main(int argc, char *argv[])或等效地int main(int argc, char **argv)(在後一種情況下,數組參數實際轉換爲指向數組的第一個元素的指針)。

在當前版本的代碼中檢索的內容是第二個char,由環境重新解釋爲字符數組給出的參數指針數組中的第二個char,這是完全不同的東西。

0

正如其他人所描述的那樣,您知道如何獲取所有參數,但不知道「< text.txt」。

這不是你的程序的參數,而是shell。這是輸入重定向,這意味着文件的輸入來自程序,就好像它來自stdin(鍵盤)一樣。

爲了防止這種情況,只需撥打你的程序是這樣的:

./sort 4 text.txt 

我不知道什麼功能「排序」是,你在呼喚。