Pierwsze starcie ze strukturami - przypisywanie wartości elementom struktury

0

Witam serdecznie,

Dopiero poznaję struktury. Aby nieco się wprawić postanowiłem napisać prosty program, który będzie dodawał użytkowników do bazy zbierając imię, nazwisko i numer id. Mój program wygląda tak:

#include <stdio.h>
#include <conio.h>

void add_user(int id, char name[], char surname[100], struct human_being *pointer);

struct human_being {
        int id;
        char name[50];
        char surname[100];
    } human[100];

int main() {

    struct human_being *pointer;
    // struct human_being human[100];
    int i = 0;
    char name[50];
    char surname[100];

    pointer = &human[0];

    puts("In order to start type sth in:");

    while (getchar() != EOF) {

        puts("Enter your name:");
        gets(name);
        puts("Enter your surname:");
        gets(surname);

        add_user(i, name, surname, pointer+i);
        i++;

    }

    getch();
    return 0;

}

void add_user(int id, char name[], char surname[100], struct human_being *pointer) {

    (*pointer).id = id;
    (*pointer).name = name;
    (*pointer).surname = surname;

    return;

}

Próbowałem podejścia wskaźnikowego i "normalnego", za każdym razem jednak tutaj:

(*pointer).name = name;
(*pointer).surname = surname;

Pojawia się błąd:

error C2106: '=' : left operand must be l-value

Z czego to wynika?

1

Problem wynika z tego że próbujesz przypisać do tablicy tablice. Nie zrobisz tego w ten sposób, musisz skopiować bajt po bajcie. A najlepiej użyj gotowej funkcji bibliotecznej strcpy która zrobi to za Ciebie.

A tak nawiasem mówiąc to piszesz w C czy C++?

0

wskaźniki na strukturę wywołuje się inaczej.

pointer->name = name // jeżeli robisz na stringach a nie C-stringach
pointer->id = id;
0
MJay napisał(a)

wskaźniki na strukturę wywołuje się inaczej.

pointer->name = name // jeżeli robisz na stringach a nie C-stringach
pointer->id = id;

Można wywołać wskaźnik na strukturę tak jak napisałeś, ale to wcale nie jest jedyna możliwość. Wersja jakiej użył Bent z wyłuskaniem obiektu i odwoływaniem się przez operator kropeczki również jest poprawna.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0