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

Lista encadeado com vetor de string


gmaranha

Pergunta

Estou fazendo um trabalho que preciso da estrutura do tíltulo.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <ctype.h>
#include <sys/wait.h>
#include <string.h>

typedef int token_t;

enum{
    T_EOL = '\n',
    T_INPUT = '<',
    T_OUTPUT = '>',
    T_PIPE = '|',
    T_ARGUMENT = 0xFF01
};

#define MAX_ARG_SIZE 10//4096

static bool isargchar(int ch);
token_t gettoken(void);
void match(token_t token);

//essa lista está me confundindo
struct arg_t{
    char *arg[2];;
    struct arg_t *next;
};
struct arg_t *arg;

token_t lookahead;

char lexeme[MAX_ARG_SIZE];


int main(int argc, char **argv){
    struct arg_t *aux = NULL;
    int i = 0;                 /*indice do argumento*/
    aux = (struct arg_t*)malloc(sizeof(struct arg_t));



    do{
        token_t t = gettoken();

        char *str;

        aux->arg[i] = (char *) malloc (sizeof (char) * (strlen ("tst") + 1));
        aux->arg[i] = lexeme;

        i ++;
        if (i==2){
            aux->arg[i] = (char *) malloc (sizeof (char) * (strlen ("tst") + 1));
            aux->arg[i] = 0;
        }
    } while (i < 2);
    int j;
    for (j = 0; j< i; j++){
        printf ("arg%d: %s\n", j,aux->arg[j]);
    }


    execvp(aux->arg[0], aux->arg);

}



static bool isargchar(int ch)
{
    return ch != EOF
        && !isspace(ch)
        && ch != '>'
        && ch != '<'
        && ch != '|';
}

token_t gettoken(void)
{


    while(true){
        int ch = fgetc(stdin);
        if(ch == EOF) return EOF;
        else if(ch == '\n') return T_EOL;
        else if(isspace(ch)) continue;
        else if(ch == '>') return T_OUTPUT;
        else if(ch == '<') return T_INPUT;
        else if(ch == '|') return T_PIPE;
        else{
            int i = 0;
            do{
                lexeme[i++] = ch;
            }while(ch = fgetc(stdin),isargchar(ch));
            lexeme[i] = 0;
            ungetc(ch, stdin);
            return T_ARGUMENT;
        }
    }

}
executando, digito ls -l por exemplo e o vetor da lista fica apenas com -l em todas as posições:
ls -l
arg0: -l
arg1: -l

Alguém sabe me dizer o que está acontecendo e como eu posso corrigir?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

O que você deseja fazer? Outra coisa: up's não são permitidos!

Sobre sua lista:

struct arg_t{
    char *arg[2];; <- acho que isso devia ser char arg[2];, e eu recomendaria colocar um tamanho grande, memória não vai ser problema. algo como: char arg[64];
    struct arg_t *next;
};

Abraços!

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...