2010-11-09 14 views

Respuesta

4

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; 
} 
+1

El "' + = '" los mezclaría todos juntos. 'passedValue.append (argv [i]). append (" ")' se vería mejor. –

2

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'

2

principal recibe char *. tendrá que poner la matriz argv en std :: strings usted mismo.

+0

main no pasa nada. en su lugar, main se pasa char * por CRT – Chubsdad

3

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 
+1

vow. como esa sintaxis i (0) +1 – Chubsdad

+4

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

+0

@luke, yup Vi su respuesta y la hice +1 porque es mucho más limpia que la mía. –

3

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[]) { /* ... */ }

+0

+1: de alguna manera el acróbata estaba colgado en mi máquina :) – Chubsdad

+0

@Chubsdad: uso Foxit ';-)' –

26

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; 
} 
+1

Sí, '+ 1' de mí, aunque por lo general quieres' argv + 1, argv + argc' (porque 'argv + 0' es el nombre de la aplicación). – sbi

+0

+1 porque es una muy buena manera: simple y eficiente. –

+0

@sbi, sí, eso es importante tenerlo en cuenta, pero estaba tratando de mantenerlo simple :) – luke

Cuestiones relacionadas