2012-02-15 95 views
1

某人如何識別他是否需要爲C++中的可執行文件輸入參數。如何識別.exe文件是否需要輸入參數

你應該在代碼中找到哪些命令來知道需要哪些參數?

例如,如果您需要像這樣運行它:hello.exe test.txt。但你不知道。

所以你運行hello可執行文件,但它需要一個文本文件在它旁邊。 如何在代碼中識別出需要這種參數?

編輯:我的源代碼主要有這樣 INT主(INT ARGC,CHAR *的argv []),但參數可以是什麼?

argc和argv出現的唯一地方就是在這一行。

#ifdef PARALLEL    
     Test.CVodeInit_parallel(states,startTime,argc,argv); 
    #else 
     Test.CVodeInit_serial(states,startTime); 
    #endif 
+0

你拆卸問題的方案? 傳遞給應用程序的參數被傳遞到主(...)函數在字符數組的形式。 – crush 2012-02-15 19:05:01

回答

0

參數傳遞給該程序作爲main函數的參數,這應該是這樣的:

int main(int argc, char** argv) 

其中argc是參數的數目和argv是一個字符串包含實際的陣列參數。

因此請檢查代碼是否處理這些參數。

注:main功能也可以是這樣的:

int main() 

這是合法的,但意味着程序不期待,或者手柄,參數。

+0

看看我的編輯。 – 2012-02-15 19:51:31

0

你寫了「在代碼中」,但你問的是「.exe」。目前還不清楚您是否有權訪問源代碼或想從原始二進制文件中派生出它。在前一種情況下,您將不得不看看main()/ WinMain()函數(或等價的入口點),後一種情況可能不切實際/太難,因爲它涉及反彙編和啓發式。

+0

我可以訪問代碼。 – 2012-02-15 19:28:00

+0

這是偉大的,所以要儘量找到主要的()/的WinMain()或類似的主功能,然後看看哪些參數,他們採取,這通常是指的argc/argv的。然後看看他們訪問這些變量的地方。 – 2012-02-15 19:33:07

0

有沒有簡單的方法來採取活的可執行文件,並詢問它需要什麼參數。大多數帶參數的EXE都有-h--help/h或類似的東西來顯示它需要的參數。但除此之外,沒有。

從源代碼中,您可以重構其參數。許多程序使用一些GNU工具來解析來自argv的參數,因此您需要熟悉這一點才能理解它正在做什麼。 Boost.ProgramOptions是一些人使用的替代方案。而其他人只是手動解析參數,所以你必須走代碼並觀察它從argv中抽出的內容。


的argc和argv出現的地方是在這行。

然後你必須看看Test.CVodeInit_parallel的實現來知道它需要什麼參數。

1

例如 - 如果有人運行這樣的代碼:

用hello.exe的test.txt

然後的argc將是2,argv的[0] = 「用hello.exe」,argv的[ 1] = 「test.txt的」

但如果它們運行這樣的代碼:

用hello.exe

然後ARGC爲1,argv的[0] = 「用hello.exe」

是,這個問題你問什麼?基本上ARGC是一個整數,並告訴你有多少字符串是argv數組

相關問題