如何重置函数中的结构?

时间:2019-05-26 11:48:23

标签: c function struct

我在主体中声明了一个结构化了的结构。 然后通过一个函数,我想重置此结构,但似乎无法。

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

#define MAX_NOME 20
#define MAX_COGNOME 20
#define MAX_PASSAPORTO 9
#define MAX_LUOGO_DI_NASCITA 15

#define MAX_GIORNO 2
#define MAX_MESE 2
#define MAX_ANNO 4

typedef struct {
    char giorno[MAX_GIORNO+1];
    char mese[MAX_MESE+1];
    char anno[MAX_ANNO+1];
} data; //struct data/*

typedef struct {
    char nome[MAX_NOME+1];
    char cognome[MAX_COGNOME+1];
    data datadinascita;
    char luogodinascita[MAX_LUOGO_DI_NASCITA+1];
    char numeropassaporto[MAX_PASSAPORTO+1];
    int id;
} passeggero; //struct passeggero

void resetUtente();

int main() {

    passeggero utenti;

    utenti.id = 1;
    strcpy(utenti.nome, "John");
    strcpy(utenti.cognome, "McCabe");
    strcpy(utenti.datadinascita.giorno, "12");
    strcpy(utenti.datadinascita.mese, "02");
    strcpy(utenti.datadinascita.anno, "1996");
    strcpy(utenti.luogodinascita, "London");
    strcpy(utenti.numeropassaporto, "AA1234567");

    printf("USER BEFORE RESET:");
    printf("\n%d ------> %s %s - Born %s-%s-%s in %s | PASSPORT NUMBER: %s\n",utenti.id, utenti.nome,
            utenti.cognome, utenti.datadinascita.giorno, utenti.datadinascita.mese, utenti.datadinascita.anno,
            utenti.luogodinascita, utenti.numeropassaporto);

    resetUtente();

    printf("USER AFTER RESET:");
    printf("\n%d ------> %s %s - Born %s-%s-%s in %s | PASSPORT NUMBER: %s\n",utenti.id, utenti.nome,
            utenti.cognome, utenti.datadinascita.giorno, utenti.datadinascita.mese, utenti.datadinascita.anno,
            utenti.luogodinascita, utenti.numeropassaporto);

    return 0;
}

void resetUtente() {

    passeggero utenti;
    int i = 0;

    utenti.id = 0;
    utenti.nome[0] = '\0';
    utenti.cognome[0] = '\0';
    utenti.datadinascita.giorno[0] = '\0';
    utenti.datadinascita.mese[0] = '\0';
    utenti.datadinascita.anno[0] = '\0';
    utenti.luogodinascita[0] = '\0';
    utenti.numeropassaporto[0] = '\0';

}

resetUtente()函数应该将结构的所有字段设置为none,但是第二个printf始终打印“ John McCabe-生于1996年12月2日在伦敦|护照号码:AA1234567

1 个答案:

答案 0 :(得分:0)

void resetUtente(passeggero *u)
{
   memset(u, 0, sizeof(*u));
}

主要

 resetUtente(&utenti);