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