очистить все значения внутри вложенной структуры, переданные функции по адресу - PullRequest
0 голосов
/ 10 апреля 2020

Вот мои структуры

struct Name {
    char firstName[31];
    char middleInitial[7];
    char lastName[36];
};

struct Contact
{
    struct Name name;
};

у меня есть массив структур Contact, который передается по адресу этой функции

void updateContact(struct Contact contacts[], int size)
{
        //More code up here that deals with finding the index 
           and such

        contacts[index].name = { 0 }; //Expected an expression before {
}

структура имени заполняется данными, и я просто нравится повторно инициализировать все содержащиеся в нем значения, чтобы я мог создавать новые данные.

Любая обратная связь помогает! Все еще учусь C и Указатели

Ответы [ 3 ]

2 голосов
/ 10 апреля 2020

Вы можете обнулить один контакт следующим образом:

        memset(contacts[index].name, 0, sizeof contacts[index].name);

Это приведет к тому, что все строки будут иметь нулевую длину.


В качестве альтернативы вы можете назначить NUL только для первого символ каждой строки, подобный этому, но для этого необходимо, чтобы вы знали и отслеживали всех членов struct Name:

        contacts[index].name.firstName[0] = '\0';
        contacts[index].name.middleInitial[0] = '\0';
        contacts[index].name.lastName[0] = '\0';

В качестве альтернативы ваш компилятор может поддерживать этот синтаксис:

        contacts[index].name = (struct Name){ 0 };
0 голосов
/ 11 апреля 2020

относительно:

contacts[index].name = { 0 };

это работает только во время инициализации, и этот оператор является присваиванием.

Рекомендуется:

memset( contacts[ index ].name, 0, sizeof( contacts[ index ].name ) );

Однако, чтобы очистить ВСЕ поля в структуре предлагаем:

memset( contacts[ index ], 0, sizeof( contacts[ index] ) );

Однако для очистки всего массива предлагаем:

memset( contacts. 0, sizeof( contacts ) );
0 голосов
/ 10 апреля 2020

Я бы посоветовал вам сделать это с помощью mallo c, чтобы вы могли легко освободить память с помощью free (указатель);

Измените свою структуру на эту:

struct Name {
    char* firstName;
    char* middleInitial;
    char* lastName;
};

Это когда вы создаете структуру:

Name name;
name.firstName = (char*) malloc(sizeof(char) * 31);

// ПОВТОР ДЛЯ ДРУГИХ СТРОК

free(name.firstName);
free(name.middleInitial);
free(name.lastName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...