Jump to content

Retorno do array


HIT_Braga
 Share

Recommended Posts

Olá pessoal  😛

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 😛   :wallbash:

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

Link to comment
Share on other sites

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

Link to comment
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
 Share

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