Jump to content

Recommended Posts

Posted (edited)

Boa noite.

Esta parte do código consiste num interpretador que neste caso interpreta o comando seq que pode ser invocado com ou sem argumentos(uma string de As e Bs).

Gostaria de saber se alguém me consegue explicar o porque de me dar estes erros e como os resolver.

prot.c: Na função ‘cmd_seq’:
prot.c:17:3: error: too few arguments to function ‘guarda_sequencia’
prot.c:6:6: note: declarado aqui
prot.c:19:3: error: too few arguments to function ‘obtem_sequencia’
prot.c:10:6: note: declarado aqui
make: ** [prot.o] Erro 1

o código é:

#include <stdio.h>
#include <string.h>
#include "erro.h"
#define MAX_SIZE 1024

void guarda_sequencia(char *guarda_args,char *args) {
	strcpy(guarda_args, args);
}

void obtem_sequencia(char *args) {
	printf("%s",args);
}

int cmd_seq(char *args) {

	if(args != NULL) {
		   guarda_sequencia();
   } else {
		   obtem_sequencia();
		  }
	 return 1;
}

/*Interpreta um comando passado numa linha*/
int interpretar(char *linha) {
	  char comando[MAX_SIZE];
	  char args[MAX_SIZE];
	  int nargs;

nargs=sscanf(linha, "%s %s", comando, args);

	   /*comando seq com argumentos*/
	   if(strcmp(comando, "seq") == 0 && nargs == 2)
				return cmd_seq(args);
	   /*comando seq sem argumentos*/
	   else if(strcmp(comando, "seq") == 0 && nargs == 1)
				return cmd_seq(NULL);
	   /*comando coords*/
	   /*else if(strcmp(comando, "coords") )
				return cmd_coords();*/
	   /*comando sair*/
	   else if(strcmp(comando, "sair") == 0){
				return 0;
	   } else {
	   /*Devolve o erro*/
				return mensagem_de_erro(E_COMMAND);
		}
}

/*Interpretador de comandos*/
void interpretador(){
	 int resultado=0;
	 char buffer[MAX_SIZE];
	 int ciclo=1;

while(ciclo && fgets(buffer, MAX_SIZE, stdin) != NULL){
	 resultado=interpretar(buffer);
		  if(resultado==0)
				 ciclo=0;
	 }
}

int main(){
interpretador();
return 0;
}

obrigado pela atenção:)

Edited by joao_oliveira
GeSHi
Posted

Tu definiste a função guarda_sequencia() com dois parametros: ambos strings.

Portanto, ao chamar a função tens de fornecer os argumentos

guarda_sequencia(string1, string2);

A mesma coisa paraa função obtem_sequencia(), só que neste caso apenas usaste um parametro na definição.

Para chamar a função precisas de fornecer um argumento

obtem_sequencia(string3);

Sugestão: tenta melhorar a indentação do teu código.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted (edited)

mas o apontador e na funçao ne?

sim

o que pretendo fazer é que a funçao guarda_sequencia() que recebe args(neste caso uma string) me guarde essa string.

pm

Edited by Marzkor
Posted

depois de alterar para :


void guarda_sequencia(char *args) {
	  char *guarda_args=0;
	  strcpy(guarda_args, args);
}

void obtem_sequencia(char *guarda_args) {
	  printf("%s",guarda_args);
}

int cmd_seq(char *args) {

	  if(args != NULL) {
		   guarda_sequencia(args);
	  } else {
		   obtem_sequencia(args);
	  }
	  return 1;
}

não deu mais erros nem warnings mas quando executo o programa ao introduzir uma sequencia o programa termina e da o seguinte erro :

"Falha de segmentação (imagem do núcleo gravada)"

alguém consegue ajudar??

Posted

o que eu quero que a funçao guarde e que quando eu introduzo por exemplo (seq asasas) ele me guarde (asasas) .

Guarde onde?

Tens que saber onde vais guardar a string.

Sabes, a qualquer momento do programa, para onde apontam os ponteiros?

Tens que saber isto!

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

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
×
×
  • Create New...

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.