2009-02-14 123 views
1

我檢查argv [1]中的參數是否對我的文件有效。通過argv打開文件[1] C++

我有一個菜單系統在自己的子程序中調用主。

讀取文件等是在與第一個分開的另一個子例程中完成的,也在main中調用。

如何將argv [1]傳輸到第一個子例程?甚至第二?

串sArgInit = argv的[1]

這樣我可以打開使用C-字符串的文件。

,但我不能得到字符串到任何函數的主要外..

是有辦法做到這一點沒有: 全局變量, 傳遞字符串作爲參數傳遞參數給子程序。

回答

1
const char *filename = argv[1]; 

然後將指針傳遞給子例程。 argv [1]對整個程序的執行仍然有效。

+0

鑑於問題的模糊性,這似乎不是一個無理的答案。 – 2009-02-14 19:15:35

0

首先,您可能希望在嘗試將它分配給C++字符串之前檢查argv [1]是否爲空。

您可以將C++字符串對象移到函數中。

最終,你可以使用c_str()來使一個C字符串

例如: 的char * SDATA =(字符*)str.c_str()

+0

c_str()返回一個char const *你爲什麼要拋棄const? – 2009-02-14 19:16:16

6

下面的代碼演示如何做到準確你需要檢查argv [1]是否存在,然後將它作爲C字符指針或C++字符串傳遞給函數,並使用該函數中的值。

#include <cstdlib> 
#include <iostream> 
#include <string> 

using namespace std; 

static void f1 (char *s) { 
    cout << "1: " << s << endl; 
} 

static void f2 (const string& s) { 
    cout << "2: " << s << endl; 
    cout << "3: " << s.c_str() << endl; 
} 

int main (int argc, char *argv[]) { 
    if (argc < 2) { 
     cout << "Usage: " << argv[0] << " <test_string>" << endl; 
     return EXIT_FAILURE; 
    } 

    char *s1 = argv[1]; 
    string s2(argv[1]); 

    f1 (s1); 
    f2 (s2); 

    return EXIT_SUCCESS; 
} 

的輸出,符合市場預期:

1: hello 
2: hello 
3: hello 

至於你的編輯,你不能訪問的argc/argv的,而不將其存儲在一個全局或將它們傳遞給函數。這是因爲它們被傳遞給main函數作爲參數,因此固有地位於該函數的本地。

2

是有辦法做到這一點沒有: 全局變量,傳遞字符串 作爲參數的參數給 子程序。

不,你必須以某種方式讓它進入例程。

將它作爲參數傳遞有什麼問題?

void my_sub(char* s){} 

void main(int argc, char* argv[]) 
{ 
    my_sub(argv[1]); 
} 
0

您必須將參數作爲參數傳遞給子例程。

void method1(char* filename) { 
    // .. 
} 

void method2(char* filename) { 
    // ... 
} 

void main(int argc, char* argv[]) { 
    method1(argv[1]); 
    method2(argv[1]); 
} 

我不確定這是否回答您的問題,請擴展。

0
class myprog { 
public: 
    myprog(const string& filename) : m_filename(filename) {} 

    void menufunc(); 
    void otherfunc(); 
private: 
    string m_filename; 
}; 

int main(int argc, char** argv) 
{ 
    myprog prog(argv[1]); 

    prog.menufunc(); 
    prog.otherfunc(); 
    return 0; 
}