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

HIT_Braga

ARGC e ARGV

Recommended Posts

HIT_Braga

Olá pessoal

Estou a tentar fazer uma coisa (axo que simples). Quero saber o numero de argumentos que foram introduzidos.

Sei que o argc devolve esse número e funciona bem quando faço comando do tipo "./teste 1 2 3" retorna 4 argumentos. O meu problema é que eu quero que ele faça isso usando o readline.h

#include<stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
int main(int argc,char argv[])
{
char *s;
s = readline("Letras>");
printf("number of args%d\n",argc);
}

Assim da forma que está retorna sempre um argumento, pois para evocar o programa faço "./teste" e depois a prompt muda para "Letras".

Sds,

HIT 😲


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
Localhost

Ele retorna 4 argumentos porque o nome do programar também conta como argumento.


here since 2009

Share this post


Link to post
Share on other sites
HIT_Braga

Eu sei disso LocalHost.

Mas eu quero que depois de invocar ./letras ; leia os argumentos que vão ser introduzidos.

Sei que quando faço ./letras 1 retorna dois args.


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
PJM

Boas HIT_Braga.

Não percebi bem o teu objectivo, mas se for ler os valores que introduziste nos argumentos será algo:

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

int main(int argc,char **argv)
{
int i;
printf("number of args: %d \n", argc);

for (i=1;i < argc; i++)
	printf("Content of argv %d: %d\n", i, atoi(argv[i]));

return 0;
}

quanto ao readline não percebi bem o objectivo disso...

espero ter ajudado.

Cumprimentos, 

      PJM

Share this post


Link to post
Share on other sites
HIT_Braga

Experimentem o código em cima que eu coloquei.

Acho que ainda não devem ter usado a biblioteca readline.h


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
marco_iku

porque essa biblioteca não existe, pelo menos não tenho no meu SO...

existe, é usada em quase todos os programas com CLI

#include<stdio.h>
#include <readline/readline.h>
#include <readline/history.h>

int main(int argc,char argv[])
{
char *s;
s = readline("Letras>");
printf("number of args%d\n",argc);
}

Se percebi o que tu querias...

se queres saber quantos argumentos foram introduzidos, dou-te uma pista: o scanf (e irmãos, ex: sscanf) devolve o nr de variáveis que atribuiu

exemplo:

int nrArg=0;
char *linha;
char *arg1;
char *arg2;
char *arg3;
char *arg4;
//...
// tens um numero limitado de argumentos certo?

linha = readline ("Letras> ");
nrArg = sscanf(linha,"%s %s %s %s", arg1, arg2, arg3, arg4);

printf("%d", nrArg); // se arg4 for = "", então nrArgs=4

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.