-2
Good afternoon, I was giving a study in lists and I went to do a little programming but I can’t at all pass my string in the correct way to the function so that it doesn’t change all my previous names from my list, I tried some modifications on pointers but always keeps changing the previous names of the list.
The only way I could was using strcpy, but I wanted to know how to do without using it, I thank you from now on!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct pessoa
{
    char *nome;
    int rg;
    struct pessoa *proximo;
};
void imprimeMenu();
void imprimeEncadeada(struct pessoa *ponteiroEncadeada);
struct pessoa *addInicioEncadeada(struct pessoa *ponteiroEncadeada, char *nome, int rg);
int main(){
    struct pessoa *ponteiroEncadeada = malloc(sizeof(struct pessoa));
    ponteiroEncadeada->nome = "";
    ponteiroEncadeada->rg = 0;
    ponteiroEncadeada->proximo = NULL;
    char *nome = (char *) malloc(50 * sizeof(char));
    int opEscolhida = 1, rg, pos;
    while (opEscolhida < 10 && opEscolhida > 0)
    {
        imprimeMenu();
        printf ("\nEscolha o numero da operacao e aperte ENTER: ");
        scanf(" %d", &opEscolhida);
        switch (opEscolhida)
        {
            case 1:
                printf("Digite um nome: ");
                scanf(" %s", nome);
                printf("Coloque o RG: ");
                scanf(" %d", &rg);
                printf("\n");
                ponteiroEncadeada = addInicioEncadeada(ponteiroEncadeada, nome, rg);
                break;
            case 2:
                break;
        }
        imprimeEncadeada(ponteiroEncadeada);
    }
    free(ponteiroEncadeada);
}
void imprimeMenu()
{
    printf ("\n\nOperacoes: \n");
    printf ("1 - Insercao de um node no inicio da lista \n");
}
void imprimeEncadeada(struct pessoa *ponteiroEncadeada){
    int i = 1;
    struct pessoa *listaEncadeada = ponteiroEncadeada;
    while (listaEncadeada != NULL){
        printf("%02d - Nome: %s || RG: %d\n", i, listaEncadeada->nome, listaEncadeada->rg);
        listaEncadeada = listaEncadeada->proximo;
        i++;
    }
}
struct pessoa *addInicioEncadeada(struct pessoa *listaEncadeada, char *nome, int rg){
    struct pessoa *novoValor = malloc(sizeof(struct pessoa));
    novoValor->nome = nome;
    novoValor->rg = rg;
    novoValor->proximo = listaEncadeada;
    listaEncadeada = novoValor;
    return listaEncadeada;
}