Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Declaração de uma struct

struct registro{
    char* nome;
    char* telefone;
};
3 respostas

Valeu por compartilhar essa maneira! nao conhecia

Manda a outra maneira, não consigo imaginar outro jeito de fazer, ainda não possuo uma grande familiaridade com a linguagem.

solução!

Olá, Henrique! Boa tarde!

Outra forma de definir uma struct é usando arrays de caracteres fixos ao invés de ponteiros para char.

#define TAMANHO_MAXIMO 100

struct registro {
    char nome[TAMANHO_MAXIMO];
    char telefone[TAMANHO_MAXIMO];
};

Com essa abordagem, você pode usar a struct da seguinte maneira:

#include <stdio.h>

#define TAMANHO_MAXIMO 100

struct  registro
{
        char    nome[TAMANHO_MAXIMO];
        char    telefone[TAMANHO_MAXIMO];
};

int     main()
{
        struct registro pessoa;

        // Atribuição de valores aos membros da struct
        printf("Digite o nome: ");
        scanf("%s", pessoa.nome);

        printf("Digite o telefone: ");
        scanf("%s", pessoa.telefone);

        // Impressão dos valores
        printf("Nome: %s\n", pessoa.nome);
        printf("Telefone: %s\n", pessoa.telefone);
        return(0);
}

A W3Schools tem documentações confiáveis sobre diversas linguagens e você pode ler em inglês ou trocar o idioma para Português, por exemplo. Leia sobre Structs e outros assuntos lá também, se desejar

Se você está começando e ainda não possui domínio de fundamentos da linguagem, talvez seja uma opção considerar este tipo de implementação, pois, além de simplificar seu código, evita problemas com alocação de memória dinâmica.

No exemplo acima, nome e telefone são arrays de caracteres com um tamanho máximo definido pela constante TAMANHOMAXIMO. Isso evita o uso de ponteiros e alocação de memória dinâmica.

Na implementação

struct registro{
    char* nome;
    char* telefone;
};

Os ponteiros nome e telefone apontam para áreas de memória que podem ser alocadas dinamicamente usando funções como malloc() ou calloc(). Isso significa que é responsabilidade do programador alocar e liberar a memória corretamente. Se a memória não for liberada da forma certa (usando free()), pode ter memory leaks (vazamento de memória).

Outro ponto é que se o ponteiro nome ou telefone não forem inicializados da forma certa ou apontarem para uma área de memória inválida, tentar acessar ou modificar os dados através desses ponteiros pode resultar em comportamento indefinido, como segmentation fault ou corrupção de memória.

Há sempre vantagens e desvantagens em todo tipo de implementação, mas para iniciar, recomendo trabalhar com os arrays mesmo e depois estudar ponteiros, alocação de memória e como liberar a memória após o uso.

. . .

Se esta resposta te ajudou, favor marcar como solucionado ✓

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software