+ Responder ao Tópico



  1. #1
    kappalinux
    Visitante

    Padrão Cast de struct

    E ai galera, blza?
    Eu estava estudava sockets em C e apareceu uma duvida e corri atras para esclarecer. Obtive muitas conclusoes.
    Uma dessas conclusoes que cheguei foi em um "cast de struct". Gostaria de saber se realmente existe isso. Se eh possivel realizar um cast de struct?
    Gostaria de trocar algumas ideias com alguem q saiba para ver se as minhas conclusoes e o meu raciocinio estah certo.
    faloow
    ateh+
    []´s

  2. #2
    hez4el
    Visitante

    Padrão Cast de struct

    Olá amigo..
    Um struct não é um tipo em que pode ser feito
    um cast. Isto acontece porque ele representa uma colecao
    entao sua estrutura interna nao pode ser modificada para
    nenhum tipo existente ja que relativamente struct não
    é um tipo mas uma estrutura como um record.
    Os casts só podem ser feitos entre tipos de dados definidos
    como float, int, char etc...
    Isso foi o que li em um artigo sobre tipagem de dados em c.
    Se algúem souber algo diferente gostaria que postasse porque esta
    é uma duvida bem interessante.

    Espero que tenha ajudado.

    [ Esta mensagem foi editada por: hez4el em 26-09-2003 10:50 ]



  3. #3
    kappalinux
    Visitante

    Padrão Cast de struct

    e ai hez4el..
    Fikei na duvida agora..mas uma duvida eh sempre saudavel para acrescentar algo e chegar a conclusoes.
    eu posto aqui o que eu chamaria de "cast de struct" nao sei se essa seria a nomeclatura correta, abaixo segue o fonte.

    #include <stdio.h>

    struct teste{
    char ip[10];
    char ip2[10];
    };

    struct teste_principal{
    char nome[30];
    struct teste var;
    };

    int main(){
    struct teste_principal fau;
    char str[10];
    printf("Digite algo:&quot<IMG SRC="images/forum/icons/icon_wink.gif">;
    scanf("%s",str);
    fau.var = *((struct teste *)str);
    printf("%s -> tudo OK -> Aqui utilizamos (struct teste_principal *)str\n",(struct teste_principal *)str);
    printf("%s -> tudo OK -> Aqui utilizamos fau.var = *((struct teste *)str)\n", fau.var.ip);
    printf("%s -> ERRO -> Aqui utilizamos fau.var = *((struct teste *)str)\n\n", fau.var.ip2);
    return 0;
    }

    faloow

  4. #4
    fricardo
    Visitante

    Padrão Cast de struct

    Kappalinux,

    sem dúvida vc pode fazer o q vc chama de "cast de struct" e isto inclusive é bastante usado em sockets, não é mesmo? Via de regra os casts são muito poderosos e úteis e vc pode usá-los o máximo. O poder aparece principalmente usando ponteiros como vc fez no exemplo. Acho q vc não precisa esquentar muito, use, porque se não for possível dá erro de compilação.



  5. #5
    kappalinux
    Visitante

    Padrão Cast de struct

    valeu fricardo..
    vou ver o posso fazer com isso.
    <IMG SRC="images/forum/icons/icon_wink.gif">

  6. #6
    kappalinux
    Visitante

    Padrão Cast de struct

    valeu fricardo..
    vou ver o posso fazer com isso.
    <IMG SRC="images/forum/icons/icon_wink.gif">



  7. #7
    hez4el
    Visitante

    Padrão Cast de struct

    Esse chamado "cast de struct" é na verdade uma atribuição de ponteiro...
    como pode ser feito com todos tipos do c e até com as funções.
    Essa dúvida é bem interessante considerando que uma atribuição deste tipo pode teoricamente ser considerada cast.
    Acho que o problema todo ficou na nomenclatura.

    Valeu pela lição.
    T+