我檢查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