Jump to content

Como usar o operador seta (->) em C e por que meu código não está funcionando corretamente?


Postagens Recomendadas

bom dia rapaziada!

estou tentando entender o operador seta (->), mas não estou compreendendo!

eu escrevi o código:

#include <stdlib.h>
#include <stdio.h>
    int main(void){
        struct dados{
            char nome[50];
            int idade;
        };
        struct dados dd;
        int *ptr = (int) malloc(sizeof(struct dados));
        ptr = &dd;
        printf("Nome: ");
        fgets(ptr->nome, 50, stdin);
        printf("Idade: ");
        scanf("%d", ptr->idade);
        printf("seu nome é %s, e vc tem %d anos!\n", ptr->nome, ptr->idade);


        return 0;
    }

 

  • Curtir 1
Link to comment
Compartilhe em outros sites

Fala, @silvaunix!

Operador de seta (->) em C é usado para acessar membros de uma estrutura (struct) através de um ponteiro para essa estrutura. Isso é útil quando você tem um ponteiro para uma estrutura e deseja acessar seus membros sem ter que usar o operador de desreferência (*) para obter o valor do ponteiro e, em seguida, acessar o membro da estrutura.

No seu código, há alguns problemas:

Você está tentando atribuir um ponteiro para uma estrutura (&dd) a um ponteiro para inteiro (int *ptr). Isso não é correto, pois os tipos são incompatíveis.

Ao usar malloc, você está alocando espaço para um ponteiro para inteiro, e não para a estrutura dados.

Na leitura da idade, você está passando o endereço de idade para scanf, mas deveria passar o endereço de ptr->idade.

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

struct dados{
    char nome[50];
    int idade;
};

int main(void){
    struct dados *ptr = (struct dados *) malloc(sizeof(struct dados));
    if (ptr == NULL) {
        printf("Erro ao alocar memória\n");
        return 1;
    }

    printf("Nome: ");
    fgets(ptr->nome, 50, stdin);
    // Remova o caractere de nova linha do nome
    ptr->nome[strcspn(ptr->nome, "\n")] = '\0';

    printf("Idade: ");
    scanf("%d", &(ptr->idade));

    printf("Seu nome é %s, e você tem %d anos!\n", ptr->nome, ptr->idade);

    free(ptr); // Não se esqueça de liberar a memória alocada

    return 0;
}

 

  • Curtir 1
Link to comment
Compartilhe em outros sites

  • Casa do Desenvolvedor mudou o título para Como usar o operador seta (->) em C e por que meu código não está funcionando corretamente?

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...