Przekazywanie dużej ilości parametrów

0

Witam,
uczę się pisać programy z wykorzystaniem GTK. Mam jednak pewien problem: w pewnym fragmencie programu muszę przekazać 3 wartości do funkcji, którą wykołuję kliknięciem w button. Zazwyczaj robiłem to tak:

gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (callback), (gpointer) "1");

Jenak w tym wypadku przekazana zostanie tylko "1".
Co zrobić? Są jakieś zastępcze funkcje, przez które można przesłać więcej parametrów?

0

Ja się tam na GTK+ nie znam, ale nie można przekazać struktury np?

0

a konkretniej: wskaźnik na strukturę, a w strukturze już co tam będziesz chciał…

0

Dobry pomysł mieliście z tymi strukturami. Niestety coś mi nie działa.
Struktura wygląda tak:

struct dane {
    struct wpis* rekordy;
    int* ile_elementow;
};

Inicjajca:

struct dane dana;

int ile_elementow = 0;
struct wpis rekordy[10];

dana.ile_elementow = &ile_elementow;
dana.rekordy = rekordy;

Przekazuję w taki sposób:

gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (callback), &dana);

A funkcja callback wygląda tak:

void callback(GtkWidget *widget, struct dane* dana){
      g_print("%d", dana.*ile_elementow);
}

Wywala mi błąd, który wskazuje na powyższą linijkę z g_print():

okno_p.c: In function ‘callback’:
okno_p.c:30: error: expected identifier before ‘*’ token

0

dana.*ile_elementow to chyba powinno być *(dana.ile_elementow)

0

Wielkie dzięki :) Nie wiem co bym bez Waszej pomocy zrobił :)

Teraz próbuje utworzyć nowy rekord w tablicy 'rekordy' wewnątrz funkcji:

char *imie = (char*)malloc(100 * sizeof(char));
char *nazwisko = (char*)malloc(100 * sizeof(char));
char *telefon  = (char*)malloc(10 * sizeof(char));

g_print("Podaj imie:\n");
scanf("%s", imie);
g_print("\nNazwisko:\n");
scanf("%s", nazwisko);
g_print("\nTelefon:\n");
scanf("%s", telefon);

*(dana->rekordy[0].imie) = imie;
*(dana->rekordy[0].nazwisko) = nazwisko;
*(dana->rekordy[0].telefon) = telefon;

*(dana->ile_elementow) += 1;

jednak kompilator zwraca mi warningi o treści:

okno_p.c:198: warning: assignment makes integer from pointer without a cast
okno_p.c:199: warning: assignment makes integer from pointer without a cast
okno_p.c:200: warning: assignment makes integer from pointer without a cast

które wskazują na linijki zaczynające się od *(dana->... (ostatnie linijki w kodzie powyżej)
Czego może dotyczyć ten błąd? Dodam, że po uruchomieniu programu zawiesza się on podczas podawania danych i w konsoli pojawia się komunikat

Naruszenie ochrony pamięci

Co mi poradzicie?

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