Salvar argumentos em vetor

1. Salvar argumentos em vetor

Gustavo Cruz
yanhke

(usa Debian)

Enviado em 10/06/2011 - 17:44h

Boa tarde Galera, não sei muito de programação, mas preciso salvar os argumentos do argv em um vetor para comparar ele depois.
Como que faço isso?

int main ( int argc, char *argv[] )
{
cout << "Recebeu " << argc << " argumentos...\n";
for (int i=0; i<argc; i++) {
cout << "Argunto " << i << ": " << argv[i] << endl;
}
return 0;
}

Muito obrigado


  


2. Re: Salvar argumentos em vetor

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 11/06/2011 - 10:40h

Se você nao for alterar os valores do argv, você pode simplesmente criar uma referencia para ele:

int main ( int argc, char **argv){
char ***myArgv = argv;
...
}

Mas, se você quiser salvar em vetor, você vai precisar de alocação de memoria, acho que isso aqui deve funcionar(to sem compilador aqui)

#include <stdio.h>
#include <stdlib.h>

int main ( int argc, char **argv ){

char *myArgv[100];
register int i;

(*myArgv) = (char*)malloc(argc);

for ( i = 0; i < argc; i++ ) strcpy(myArgv[i], argv[i]);
printf ( "argv[0]: %s\n", argv[0]);
for ( i = 0; i < argc; i++ ) printf ( "myArgv[%d]: %s\n", i, myArgv[i]);

return 0;
}


Se não der posta denovo que vou tentar resolver,
Enzo Ferber
[]'s


3. Erro

Gustavo Cruz
yanhke

(usa Debian)

Enviado em 13/06/2011 - 15:54h

Fala Enzo, então deu erro no heap....
Estou usando o Visual Studio 2010 Ultimate....

Windows has triggered a breakpoint in teste.exe.

This may be due to a corruption of the heap, which indicates a bug in agora.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while agora.exe has focus.

The output window may have more diagnostic information.


4. Re: Salvar argumentos em vetor

Elder Marco
eldermarco

(usa Fedora)

Enviado em 13/06/2011 - 17:31h

Não sei se entendi bem a sua dúvida, mas você já tem um vetor com o argv. Se vai fazer a comparação dentro do próprio programa, não irá precisar salvar ele ou criar uma cópia do mesmo. Simplesmente use um argv[indice] em algum lugar. Como forma de manter a coisa mais segure, declare-o como sendo um const char em vez de somente char. Isso fará com que você obtenha um erro caso tente alterá-lo:


int main ( int argc, const char *argv[] )
{
cout << "Recebeu " << argc << " argumentos...\n";
for (int i=0; i<argc; i++) {
cout << "Argunto " << i << ": " << argv[i] << endl;
}
return 0;
}


5. Re: Salvar argumentos em vetor

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 22/06/2011 - 09:56h

Opa!
Voltei!

Então, agora, com acesso à um compilador, e relembrando tudo, acho que é isso aqui que você quer:
(só que está em C, e você quer em C++, mais a ideia é a mesma ;)

#include <stdio.h>
#include <stdlib.h>

int main ( int argc, char **argv ){

char **myArgv;
register int i;

myArgv = (char **)malloc(argc * sizeof(char*));

for ( i = 0 ; i < argc; i++ )
{
myArgv[i] = (char *)malloc((strlen(argv[i]) + 1) * sizeof(char));

strcpy(myArgv[i], argv[i] );
}


for ( i = 0; i < argc; i++ ) printf ( "%s\n", myArgv[i] );

return 0;
}

Espero que isso ajude,
Se não der certo, posta denovo que agente dá um jeito e resolve,
Enzo Ferber
[]'s


6. Re: Salvar argumentos em vetor

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 24/06/2011 - 11:28h

Ah, em C++ você ainda pode usar as palavras chave new e delete:

...
char **nargv = new char*[argc];
for ( int i = 0; i < argc; i++ )
nargv[i] = new char[strlen(argv[i])];

e para desalocar (coisa que nao coloquei no codigo acima, mais você deve fazer isso):

...
for ( int i = 0; i < argc; i++ )
delete [] nargv[i];
delete [] nargv;

Acho que é isso mesmo.
Espero ter ajudado,
Enzo Ferber
[]'s






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts