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

Sign in to follow this  
HIT_Braga

Retorno do array

Recommended Posts

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! "

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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! "

Share this post


Link to post
Share on other 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

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
Sign in to follow this  

×

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.