verdadero true significa que programa falso c++ g++ command-line-arguments

programa - que significa true en c++



Es igual a devolver falso en c++ (3)

No puede comparar los punteros a los caracteres literales de cadena a ( char const* ) usando == . Use std::strcmp() ( <cstring> ) o construya un std::string ( <string> ) a partir de él para hacerlo comparable a un char* usando == .

Soy bastante nuevo en cpp y estoy tratando de hacer un proyecto. Dice que el código debe tomar un nombre de archivo como argumento y será ejecutado por:

./main -i filename

He escrito un for-loop que recorrerá la lista de argumentos para encontrar el argumento "-i" para que pueda determinar el nombre del archivo. Pero esta línea siempre devuelve falso:

argv[i] == "-i"

A continuación se muestra mi código:

#include <string> #include <iostream> int main(int argc, char *argv[]) { std::string test = argv[0]; for(int i = 0; i < argc; i++){ if(argv[i] == "-i"){ test = argv[i+1]; break; } } std::cout << test; return 1; }


prueba esto:

#include <iostream> #include <string> using namespace std; int main(int argc, char *argv[]) { string test; for(int i = 0; i < argc; i++){ cout << "/n" << argv[i] << endl; if((string)argv[i] == "-i"){ test = argv[i + 1]; cout << "test= " << test << endl; break; } } cout << test << endl; system("pause"); return 0; }


argv[i] == "-i"

En la línea anterior se comparan dos punteros: char* y const char* , respectivamente.

En otras palabras, en lugar de comparar argv[i] y "-i" se comparan dos punteros que es poco probable que apunten a la misma ubicación. Como resultado, el cheque no funciona en su caso.

Puede solucionarlo de varias maneras, por ejemplo, ajuste "-i" en std::string para que la comparación funcione correctamente:

const auto arg = std::string{ "-i" }; for(int i = 0; i < argc; i++){ if(argv[i] == arg){ test = argv[i+1]; break; } }

A partir de C ++ 17 , también puede usar std::string_view :

const std::string_view sv{ "-i" }; for(int i = 0; i < argc; i++){ if(argv[i] == sv){ test = argv[i+1]; break; } }

que es una forma preferible ya que evita la creación de std::string .