C++ passagem de parâmetros

8 respostas
K

Olá!

Preciso fazer o seguinte em C++:

Eu criei uma aplicação e gerei o seu executável: restart.exe, mas eu precisaria chamar esse restart.exe passando algum parâmetro junto…alguém sabe se é possível fazer isso usando C++?

obrigada!!

8 Respostas

E

Dá sim, e o esquema é muito parecido com o do Java. Exemplo:

Vou dar um exemplo.

#include <iostream>
using namespace std;

int main (int argc, char *argv[]) {
    for (int i = 0; i < argc; ++i) {
        cout << i << "=" << argv[i] << endl;
    }
}

argc é a contagem de parâmetros (parecido com args.length no Java)
argv[0] é o nome do executável do programa, argv[1] o primeiro parâmetro, e assim por diante.

K

Olá!

Estou usando o seguinte:

int WinMain(
  HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpCmdLine,
  int nCmdShow
);

No atributo lpCmdLine estão os 2 parâmetros passados para a minha aplicação, esses parâmetros vem separados por espaço. Como posso guardar cada parâmetro em uma variável? Alguma dica?

Obrigada!

E

Hum, ordinariamente quando você usa WinMain (em vez de main), realmente você tem de quebrar o comando segundo os espaços e aspas.

Se você está usando a biblioteca Boost, pode usar boost::split: http://stackoverflow.com/questions/4224935/splitting-the-string-using-boostalgorithmsplit

Se estiver usando a Qt, pode usar split: http://stackoverflow.com/questions/8582138/how-can-i-split-a-string-according-to-delimiters-in-qt

K

Obrigada pelas dicas.

Para separar os parâmetros em tokens contei com a ajuda da função strtok(), mas fiz um exemplo com string mesmo e não com o tipo LPTSTR.

Agora estou pesquisando como converter LPTSTR para string para pode usar strtok() no projeto… se alguém tiver alguma dica…

Vlwww!

E

Dona Carina,

Uma coisa que vai lhe ajudar bastante, quando for fazer programas em Windows API, é que 99% do tempo você não precisa usar Unicode e sim somente ANSI. Portanto, você pode supor que LPCTSTR, LPTSTR etc. são respectivamente const char * e char *, e fazer a conversão direta de char * para std::string.

(Veja a opção de compilação, não deve ser a default, que é Unicode, e sim a “Multiple Byte Code etc.” - veja nas propriedades do projeto.)

(É claro que eu sei que seu nome é com a letra K :slight_smile: )

E

Outra coisa: a menos que seja para um projeto que não pode usar std::string ou a string do Qt de jeito nenhum, não use strtok. Essa função tem um defeito incorrigível, que é o de estragar a string original. Isso pode dar muita dor de cabeça.

K

Como assim estragar a string original?

E

Vamos supor que a string original fosse:

char *s = "O rato roeu a roupa do rei de Roma";

Após você usar o strtok para varrer todas as substrings, a string acaba ficando mais ou menos assim (vou usar “|” para indicar o caracter \000 ou NUL):

char *s = "O|rato|roeu|a|roupa|do|rei|de|Roma";

Isso pode provocar um erro esquisito nos seus programas, que é difícil de debugar.

Criado 22 de janeiro de 2013
Ultima resposta 23 de jan. de 2013
Respostas 8
Participantes 2