así que ahora tengo un¿Cómo obtener std :: cadena de argumentos de línea de comandos en la aplicación win32?
int main (int argc, char *argv[]){}
cómo hacer que la cadena basa? ¿será suficiente int main (int argc, std::string *argv[])
?
así que ahora tengo un¿Cómo obtener std :: cadena de argumentos de línea de comandos en la aplicación win32?
int main (int argc, char *argv[]){}
cómo hacer que la cadena basa? ¿será suficiente int main (int argc, std::string *argv[])
?
Si desea crear una cadena fuera de la entrada parame ters pasado, también puede añadir punteros a los caracteres para crear una cadena usted mismo
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
string passedValue;
for(int i = 1; i < argc; i++)
passedValue += argv[i];
// ...
return 0;
}
No. Eso no está permitido. Si está presente, tiene el mandato de ser char * argv [].
Por cierto, en C++ principal siempre se debe declarar a volver 'int'
principal recibe char *. tendrá que poner la matriz argv en std :: strings usted mismo.
main no pasa nada. en su lugar, main se pasa char * por CRT – Chubsdad
No puede hacerlo de esa manera, ya que la función principal se declara explícitamente como un punto de entrada. Tenga en cuenta que el CRT no sabe nada acerca de STL, por lo que sería barf de todos modos. Proveedores:
#include <string>
#include <vector>
int main(int argc, char* argv[])
{
std::vector<std::string> args;
for(int i(0); i < argc; ++i)
args.push_back(argv[i]);
// ...
return(0);
}; // eo main
vow. como esa sintaxis i (0) +1 – Chubsdad
Como conoces el tamaño del vector resultante, puedes usar el constructor del tamaño del vector para preasignar, evitando posibles reasignaciones múltiples con .push_back(). También puede usar el constructor del iterador del vector para evitar tener que escribir el loop usted mismo. – luke
@luke, yup Vi su respuesta y la hice +1 porque es mucho más limpia que la mía. –
Eso sería no estándar debido a que el estándar en 3.6.1
dice
Una implementación no predefinir la función principal. Esta función no se sobrecargará. Deberá tener un tipo de devolución de tipo int, pero de lo contrario su tipo está definido por la implementación. Todas las implementaciones permitirán ambas de las siguientes definiciones de principal:
int main() { /* ... */ }
y
int main(int argc, char* argv[]) { /* ... */ }
+1: de alguna manera el acróbata estaba colgado en mi máquina :) – Chubsdad
@Chubsdad: uso Foxit ';-)' –
No se puede cambiar la firma del principal, por lo que esta es la mejor opción:
#include <string>
#include <vector>
int main(int argc, char* argv[])
{
std::vector<std::string> params(argv, argv+argc);
// ...
return 0;
}
El "' + = '" los mezclaría todos juntos. 'passedValue.append (argv [i]). append (" ")' se vería mejor. –