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
.