Как я могу сбросить структуру в функции? - PullRequest
0 голосов
/ 26 мая 2019

Я объявил структуру и инициализировал ее в основном. Затем через функцию я хочу сбросить эту структуру, но я не могу.

#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, но 2-й printf всегда печатает " Джон МакКейб - 12-02-1996, Лондон, № ПАСПОРТА: AA1234567 «

1 Ответ

0 голосов
/ 26 мая 2019
void resetUtente(passeggero *u)
{
   memset(u, 0, sizeof(*u));
}

А в основном

 resetUtente(&utenti);
...