Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

André Aparicio

int argc, char *argv[]

Recommended Posts

André Aparicio

Para que serve isto quando se inicia a função main?

int main(int argc, char *argv[])

Share this post


Link to post
Share on other sites
Triton

Está relacionado com a passagem de argumentos ao programa, do género:

programa.exe arg1 arg2

argc - número de argumentos

argv - array com os argumentos


<3 life

Share this post


Link to post
Share on other sites
Hipnoted

Só para complementar:

argv[0] = nome do programa a correr

argv[1] = primeiro argumento

argv[2] = segundo argumento

argv[n] = n argumento


"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Share this post


Link to post
Share on other sites
André Aparicio

Que fixe, já posso fazer programas com argumentos.  :cheesygrin:

Mas como é que nunca vi informação sobre isto em tutoriais de C???  :dontgetit:

Já fiz um pequeno programa:

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("Numero de argumentos = %d\n", argc);
    for(int num = 0; num < argc; num++)
    {
       printf("%d - %s\n",num, argv[num]);
    }
}

Share this post


Link to post
Share on other sites
Hipnoted

No fórum há bastante código sobre isso, e é bastante usual usarem isso nos programas.


"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Share this post


Link to post
Share on other sites
andreb

boas

precisava de uma ajudinha sobre isto..

int main(int argc, char *argv[]){
if(argv[1]=="f"){ blablabla } else { printf("%c",argv[1]); }
system("pause");
}

eu executo o programa com o parâmetro f e não funciona, adicionei o printf("%c",argv[1]); para ver se dava e isto diz: [ 

alguem me pode ajudar?

cumps andreb


...

Share this post


Link to post
Share on other sites
Betovsky

Primeiro não podes comparar argv[1] == "f"

Tens de usar a função strncmp.

Segundo se queres fazer print tens de por %s já que se trata de uma string não de um char.


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
Betovsky

if(argv[1] == "f") { 

Fica

if(strncmp(argv[1], "f", 1) == 0) {


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
P_E_D_R_O

Já agr... quando e k se utiliza o int argc, char *argv[]? É k estou a fazer um prog em linux e só lá é k necessito de utilizar isto uma vez que trabalho na consola.

No exemplo abaixo não é necessário utilizar o argv e o argc?

Ex:

void main (void)
{
  int a, b;

  printf ("Valor A:\n");
  scanf ("%d", &a);
  printf ("Valor B:\n");
  scanf ("%d", &b);
  printf ("A=%d\nB=%d\n", a, b);
}

Share this post


Link to post
Share on other sites
Rui Carlos

Precisas de usar o argc e argv quando queres saber quais os parâmetros com que o comando foi invocado. Isto tanto se aplica em Linux como noutro SO qualquer, mesmo quando o programa tem interface gráfica.

Share this post


Link to post
Share on other sites
P_E_D_R_O

Mas então, não estou a perceber... o argv e o argc substituem por exemplo o scanf? Por exemplo, no Dev quando se executa um programa ele abre uma janela DOS em k a partir de la se introduzem os valores k são pedidos/recebidos pelo scanf ou outra função.

Obg

Share this post


Link to post
Share on other sites
Rui Carlos

Os valores que obténs com o argc e argv são os valores que são passados ao mesmo tempo que a aplicação é invocada. O scanf lê valores que introduzes depois da aplicação arrancar. Não é exactamente a mesma coisa...

Normalmente aplicações com interface gráfica não usam scanfs, mas usam o argc e argv.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.