2009-02-14 95 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; 
}