对堆栈结构内部结构的动态堆栈赋值

时间:2020-06-15 02:56:31

标签: c struct

我在遇到问题:novo->conta.nome_cliente = valor2;。在这种动态堆栈结构中。 Empilhar是将新元素压入堆栈的功能。为什么我不能为堆栈内部的结构分配新值?

struct conta_de_luz 
{
    int cod_cliente;
    char nome_cliente[40];
};

typedef struct Item {

    struct conta_de_luz conta;

    struct Item *anterior; 
} Elemento;

void Inicializar(Elemento **topo) {

    *topo = NULL;
}

int EstaVazia(Elemento **topo) {
    if(*topo == NULL)
        return VERD;
    else
        return FALSO;
}

void Empilhar(Elemento **topo, int valor, char valor2) {

    Elemento *novo;

    novo = (Elemento *) malloc(sizeof(Elemento));

    novo->conta.cod_cliente = valor;

    novo->conta.nome_cliente = valor2;

    novo->anterior = *topo;

    *topo = novo;
}

1 个答案:

答案 0 :(得分:0)

问题在于,行novo->conta.nome_cliente = valor2;char分配给定义为char nome_cliente[40];的字符串。

因此,您的功能可能应该是void Empilhar(Elemento **topo, int valor, char* valor2)。但这仍将假设valor2的值在topo的生存期内一直保留在内存中。

最好是void Empilhar(Elemento **topo, int valor, const char* valor2),然后再使用strcpy(novo->conta.nome_cliente, valor2);

但这假设valor2包括其NULL终止符的长度始终在40个字符之内。如果不能保证此假设,则最好使用strdup()复制字符串。然后,您还需要在清理函数中单独free()