Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

HIT_Braga

Retorno do array

Mensagens Recomendadas

HIT_Braga

Olá pessoal  :P

Estou com dificuldades em fazer passar um array para a minha função main.

Gostava que me ajudassem se possivel claro.

#include"check.h"
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int teste(char s[])
{
    char *tok[3], *p;
    int i;

    p = strtok(s," ");
    for (i = 0; p && i < 3; i++) {
        tok[i] = p;
        p = strtok(NULL," ");
}
/*if (i < 3) {
        fprintf(stderr,"Parametros em falta\n");
        return -1;*/
printf("TOK0:%s\n",tok[1]);
}
int main()
{
char *comando[];
char op[]="p 1 2";
comando=teste(op);
printf("COMANDO1:%s\n",comando[0]);
}

gostava de receber o *tok[3] de forma a poder utilizar na minha main este array que está devidamente dividido.


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Tens de alocar dinamicamente senão ele no final é destruído. Como o nome de um array é na verdade um ponteiro para o seu primeiro elemento tu ao fazeres isto, por exemplo: return array vais estar a retornar o endereço do primeiro elemento. Quando ele for destruído (porque a função terminou) tu já não vais ter o endereço do array mas sim de outra coisa qualquer. Isto pode levar-te a um segmentation fault ou a um comportamento estranho.

Tens mesmo de alocar dinamicamente o array e depois retornar o seu endereço. Alocar dinamicamente vai fazer com que o array exista na memória até tu o destruires ou até o programa acabar.

Também podes declarar como variável global para resolver o problema.

Só mais uma nota. Tu quando retornas o array alocado dinamicamente tens de retornar o ponteiro que recebeu o endereço no retorno da função malloc, por exemplo. Esse ponteiro é destruído no final da função, no entanto, vais ter um ponteiro na main a receber o endereço do array alocado dinamicamente.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HIT_Braga

Localhost brigado pela explicação.

Apesar de confusa para o meu nível em C, axo que é qualquer coisa como isto:

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

char teste(char s[])
{
    char *tok[3], *p;
    int i;
a=(char)malloc(10*size of(char));

    p = strtok(s," ");
    for (i = 0; p && i < 3; i++) {
        tok[i] = p;
        p = strtok(NULL," ");
}
/*if (i < 3) {
        fprintf(stderr,"Parametros em falta\n");
        return -1;*/
a=tok;
return a;
}
int main()
{

char op[]="p 1 2";
char *comando=teste(op);
printf("COMANDO1: %s",comando[0]);
}

Estou no caminho certo?Ou vai mais uma ajudinha :P   :wallbash:


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Estás num bom caminho sem dúvida. Só estás aí a fazer uma atribuição estranha.

Tu não podes fazer a = tok; porque eles estão em sitios diferentes da memória. Só estás a passar o endereço do primeiro elemento. Tens de usar a função strcpy, por exemplo. De resto é isso.

Tens também um erro. A palavra reservada sizeof é mesmo sizeof e não size of.

EDIT: Na chamada à função malloc tens de fazer este cast: (char *) e não só (char) porque é um ponteiro.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.