Ir para conteúdo
Fórum Script Brasil
  • 0

argc e argv


joao.victor

Pergunta

3 respostass a esta questão

Posts Recomendados

  • 0

main também é uma função, e a consequência disto é que também aceita parâmetros, porem não parâmetros qualquer se não uma lista de parâmetros. Alguma vez você provou o comando ip config no CMD? Abra e digite isso:
Screenshot_1.jpg.431c05d56f4546eabf57b47b346107db.jpg
vão a sair alguns dados relativos a sua configuração ip blablabla, é só um exemplo para ilustrar o uso de parametros dos programas, mais especificamente vamos a provar o uso de parâmetros da função main do bloco de notas.
Agora pegue e digite isso, mas antes você precisa dar permissão administrativa para o cmd, então feche a janela do prompt e abra ela como administrador desta forma:
Primeiro escreva cmd na txtbox do menu inicio para buscar programas e características do windows
Screenshot_2.jpg.bce929fe47e15a218b89c495a8e0f1f6.jpg
Quando sair o CMD na lista como podemos ver na imagem abaixo, use o botão direito do mouse para ver o menu de opções relativas a esse programa e escolha a seguinte opção:

Screenshot_3.jpg.ee1e918f49ed3e7343e851d32665883f.jpg

Isso vai abrir o prompt em modo administrador. Se não sabe o que isso significa, no nosso caso quer dizer que temos acesso a certas características que por exemplo nos permita salvar arquivos de texto no escritório e muitas outras coisas.Screenshot_4.jpg.6956ffe53cf283b3a84387e97847c5f2.jpg

Note que agora estamos no modo administrador do sistema.
Agora escreva isso: "ipconfig > C:\Users\%username%\Desktop\prova.txt"

Screenshot_5.jpg.d50dbb190dcf58196e4367b7c3374725.jpg

Agora vai no escritório e procure um arquivo chamado prova.txt, nele estão todos os dados que antes saiam no prompt ao digitar ipconfig. Que aconteceu? Primeiro vai notar que o prompt não aparece nada antes apareciam vários dados sobre sua conexão, mas por alguma estranha razão não aparece nada. O que aconteceu é que desviamos a saída de um programa para outro usando o operador >. O ipconfig nada mais é que um programa, para você ter uma ideia do que falo seria a mesma coisa escrever desta forma: ipconfig.exe,.Se você for um usuário avançado do Windows isso tudo você já deve saber, mas explico desta forma porque o objetivo do fórum não é só ajudar ao dono do post se não ajudar a qualquer usuário que quiser consultar.
Bom voltando aqui ao assunto, ipconfig esta dentro da pasta c:\Windows\system32, voce pode comprovar indo nesta pasta e procurando ele lá.

Screenshot_6.jpg.9983a643debcc7c2787c716e14350af1.jpg

O prompt não exige você digitar o .exe mas isso não quer dizer que ipconfig não seja um programa, e ai ta a prova.

Agora o mais importante para você entender o exemplo é saber que ao executar o programa ipconfig ou ipconfig.exe, esse programa vai tomar uns dados do sistema relativos a sua ip e vai jogar eles na tela (no promptou CMD, como gostar mais >_<), o caso é que podemos desviar essa saída de dados para o bloco de notas usando os parametros do bloco de notas. E como isso é possivel? tadah!!! Pois é possível porque o bloco de notas tem o argc e argv dá!!!! A essas alturas o que você quer é saber como funciona isso certo?

Vamos tentar ver um exemplo fácil mas antes vamos ver o que é isso realmetente e como funciona.
Em um sistema operativo tudo são funções, programas são funções, pense que o sistema operativo é uma função, e que ele chama a seu programa, ele chama a main, por isso você deve ter sempre um main no seu programa, de outro modo o sistema operativo não saberia qual função chamar. Se o sistema operativo for uma função ele pode passar parâmetros para outras funções certo? Essa é uma das características de uma função, receber parâmetros e retornar valores entre outras.
Então sabendo tudo o anterior agora vamos ver como funciona esses parametros. Nesse ponto serão ainda mais duvidas, algumas delas seriam: Quantos parâmetros pode ter main? Posso usar qualquer tipo parâmetros(float, double, char, etc)? Como funciona? E por aí vai... vamos tentar responder a todas.

Quantos parâmetros pode ter main?
Somente e sempre 2, ou nenhum!

Posso usar qualquer tipo parâmetros(float, double, char, etc)?
Não!!! Somente são 2 parâmetros os que aceita, ou nenhum, mas esse não vem ao caso. A função main aceita uma lista e basicamente são de strings, mais concretamente uma matriz de strings, por isso você pode ver isso desta forma char *argv[], ou de esta outra char **argv, é uma matriz dinâmica de strings. O outro parâmetro é um contador int argc, para saber quantas strings recebeu, pode ser zero, 1 ou mais strings que você recebeu, pois se trata de uma lista que tem um tamanho variavel, para poder processar devemos saber o tamanho da lista.

Para você fazer uma ideia o que significa argv e argc quer dizer arguments values e arguments count, ou para mais fácil entendimento contador(argc) e lista de argumentos(argv).

Vamos fazer uma prova então:
 

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


int main ( int argc, char **argv ) {
    for ( int i = 0; i < argc; i++ )
        printf ( "%s\n", argv[i] );

    getchar();    
    return 0;
}

Guarde como main.c e compile ele. Logo abra o CMD navegue até a pasta onde você guardou o main.c e onde estiver guardado o main.exe(programa compilado), caso for no seu escritório poderia ser cd c:\Users\%username%\Desktop, digite isso para chegar no escritorio. Agora digite main.exe seguido do que você quiser, tipo "main.exe isto é um exemplo" você deveria poder ver isto na tela:
isto
es
um
exemplo

O "main.exe isto é um exemplo" quer dizer que você chamou o programa e passou uma lista de argumentos main.exe + lista de argumentos

Que aconteceu? Ao receber essa lista de argumentos posso fazer com ela o que bem entender e neste caso peguei cada um dos strings da lista que recebeu main e mostrei em linhas diferentes, só isso.

Não adianta rodar ele desde codeblocks, ou desde visual studio, nem outro IDE, tem que ser desde o CMD mesmo, pois codeblocks não passa parâmetros é você que tem que passar os parâmetros desde o CMD.

 

Da uma olhada nesses 2 videos aqui: um é em C++ mas acho que é o melhor mas se n entender veja o outro
https://www.youtube.com/watch?v=bt4c6ivpAgY

https://www.youtube.com/watch?v=SYS1u4A79pU

Se tiver duvidas pergunte

 

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...