2017-10-06 78 views
-4

我想从输入文件中读取读取文件,我的代码就像下面:如何从ARGC

int main(int argc, char* argv[]) 
    { 
    /* 1st arg: input file name , 2nd arg: output file name */ 
    cout<<argc<<endl; 

    ifstream input_file; 

    input_file.open(argc); 

    return 0; 
    } 

Q1。当我打印argc时,argc = 3?魔法3从哪里来? Q2302。由于argc的类型是int,所以我应该将argc读为const char *,然后是input_file.open()正确?

Q3。 argv是我的输出名称,但为什么argv []的类型是char *。我想到的argv类型为字符串,因为输出文件的名称是字符串

我真的很新的C++

感谢提前:)

+0

我建议你做类似'的for(int i = 0;我

+1

请阅读[文档](http://en.cppreference.com/w/cpp/language/main_function)。 –

+0

@Someprogrammerdude哦!它现在正在工作!谢谢! :))))) – Mengge

回答

1

Q1。当我打印argc时,argc = 3?魔法3从哪里来?

argcargv在命令行中用于将输入传递到您的程序。 argc存储通过输入的数量,argv存储输入的值。

argv被声明为char*[],也就是说指向char的指针数组。这意味着,你通过的每一个输入,独立于它的本质(数字,字符或任何其他)将被视为char*,并且将是该矢量的一个元素。

从命令行,你可以执行你的程序的打字:

./myProgram input1 input2 

现在,input1input2将被传递到您的主要功能参数。 argv将等于您传递的输入数+ 1,因为程序的名称实际上被视为您程序的输入。在这种情况下,您通过2个输入,因此argv = 3.

Q2。由于argc的类型是int,所以我应该将argc读为const char *,然后是input_file.open()正确?

不,你应该阅读这样你输入:

input_file.open(argv[1]); // <-- input1 is located at index 1 
output_file.open(argv[2]); // <-- input1 is located at index 2 

Q3。 argv是我的输出名称,但为什么argv []的类型是char *。我想到的argv类型为字符串,因为输出文件的名称是字符串

应该清楚你所有的投入都存储在argv[]并且您可以伊斯利通过数组访问它们:

argv[1] = imput1 
argv[2] = imput2 
argv[3] = imput3 
... 

注: argc通常在使用,如果条件避免访问非法内存区域。考虑下面的程序:

int main(int argc, char* argv[]) 
{ 
    std::cout << argv[1]; 
    std::cout << argv[2]; 
    std::cout << argv[3]; 

    return 0; 
} 

如果你运行你的程序:

./myProgram输入1输入2

,你可能会得到一个分段错误,因为你正在试图访问argv[3]由于数组argv只有3个元素,所以不存在。

您可以防止使用argc此崩溃:

int main(int argc, char* argv[]) 
{ 
    if (argc == 4) 
    { 
     std::cout << argv[1]; 
     std::cout << argv[2]; 
     std::cout << argv[3]; 
    } 
    else 
     std::cout << "Please, provide 3 inputs." << std::endl; 
    return 0; 
}