我检查argv [1]中的参数是否对我的文件有效。通过argv打开文件[1] C++
我有一个菜单系统在自己的子程序中调用主。
读取文件等是在与第一个分开的另一个子例程中完成的,也在main中调用。
如何将argv [1]传输到第一个子例程?甚至第二?
串sArgInit = argv的[1]
这样我可以打开使用C-字符串的文件。
,但我不能得到字符串到任何函数的主要外..
是有办法做到这一点没有: 全局变量, 传递字符串作为参数传递参数给子程序。
我检查argv [1]中的参数是否对我的文件有效。通过argv打开文件[1] C++
我有一个菜单系统在自己的子程序中调用主。
读取文件等是在与第一个分开的另一个子例程中完成的,也在main中调用。
如何将argv [1]传输到第一个子例程?甚至第二?
串sArgInit = argv的[1]
这样我可以打开使用C-字符串的文件。
,但我不能得到字符串到任何函数的主要外..
是有办法做到这一点没有: 全局变量, 传递字符串作为参数传递参数给子程序。
const char *filename = argv[1];
然后将指针传递给子例程。 argv [1]对整个程序的执行仍然有效。
首先,您可能希望在尝试将它分配给C++字符串之前检查argv [1]是否为空。
您可以将C++字符串对象移到函数中。
最终,你可以使用c_str()来使一个C字符串
例如: 的char * SDATA =(字符*)str.c_str()
c_str()返回一个char const *你为什么要抛弃const? – 2009-02-14 19:16:16
下面的代码演示如何做到准确你需要检查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
函数作为参数,因此固有地位于该函数的本地。
是有办法做到这一点没有: 全局变量,传递字符串 作为参数的参数给 子程序。
不,你必须以某种方式让它进入例程。
将它作为参数传递有什么问题?
void my_sub(char* s){}
void main(int argc, char* argv[])
{
my_sub(argv[1]);
}
您必须将参数作为参数传递给子例程。
void method1(char* filename) {
// ..
}
void method2(char* filename) {
// ...
}
void main(int argc, char* argv[]) {
method1(argv[1]);
method2(argv[1]);
}
我不确定这是否回答您的问题,请扩展。
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;
}
鉴于问题的模糊性,这似乎不是一个无理的答案。 – 2009-02-14 19:15:35