C++, how to provide the input filename from the command line, without hardcoding it in the program?

c++, filenames

Solution

You can access the command line arguments passed to your program in the `main` function:

int main(int argc, char *argv[]) { }

`argc` is the number of arguments passed to your program and `argv` contains pointers to C-strings holding the arguments passed to your program. So using this array you can access the arguments passed to your program.

But you have to pay attention: the program itself is always passed to the program as first argument. So argc is always at least one and `argv[0]` contains the program name.

If you want to access the `input.txt` from your post you could write:

int main(int argc, char *argv[]) {
   if (argc > 1) {
      // This will print the first argument passed to your program
      std::cout << argv[1] << std::endl;
   }
}

Problem

This is the continuation of my previous question, In C++, how to read the contents of a text file, and put it in another text file? In that, I was able to able to open an input file `input.txt` and read it contents successfully, but now i don't want to hardcode or give the input filename beforehand, ``` ifstream myfile ("input.txt"); if (myfile.is_open()) ``` but i want to give the input file name later after compiling the program and generating an executable file named `test`in the command line, as shown below ``` ./test input.txt ``` Any suggestions on how to do this ?

Original source

Related problems