Probleme beim Zugriff auf eine Struktur
-
Hallo,
ich versuche ein übersichtliches Programm zu schreiben und scheitere aber irgendwie an der Umsetzung.
Ich habe eine Struktur Encoder für Funkfernbedienungsencoder. Je nach verwendetem Typ (von Wohnung zu Wohnung unterschiedlich) würde ich gerne dynamisch Speicher reservieren, je nachdem ob ein Encoder vorhanden ist oder nicht. In diesem Fall ist nur ein Typ pt2260 vorhanden.
Im Hauptprogramm erzeuge ich daher eine Struktur pt2260 auf die ich dann im weiteren Verlauf zugreifen möchte, irgendie ist da aber der Wurm drin:
sswitch.h
#include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct { char **groups; unsigned int ngroups; char **sockets; unsigned int nsockets; char **data; unsigned int pulse_len; } Encoder; void set_pt2260(Encoder *pt2260);
sswitch.c
void set_pt2260(Encoder *pt2260) { char *pgroup, *psocket; int i; pt2260->pulse_len = 350; pt2260->ngroups = 4; pt2260->nsockets = 3; pt2260->groups = (char **)malloc(pt2260->ngroups * sizeof(char *)); pt2260->sockets = (char **)malloc(pt2260->nsockets * sizeof(char *)); pgroup = (char *)pt2260->groups; psocket = (char *)pt2260->sockets; char *groups[] = {"1FFF", "F1FF", "FF1F", "FFF1"}; char *sockets[] = {"1FF0", "F1F0", "FF10"}; char *data[] = {"0010", "0001"}; printf("\nGroups:\n"); for (i = 0; i < pt2260->ngroups; i++) { strcpy(pgroup, groups[i]); printf("%s\n", pgroup); pgroup++; } printf("\nSockets:\n"); for (i = 0; i < pt2260->nsockets; i++) { strcpy(psocket, sockets[i]); printf("%s\n", psocket); psocket++; } } int main(void) { Encoder pt2260; set_pt2260(&pt2260); printf("\n%s\n", (char *)pt2260.sockets); return 0; }
$ ./sswitch
Groups:
1FFF
F1FF
FF1F
FFF1Sockets:
1FF0
F1F0
FF101FFF10
Hier hätte ich eigentlich 1FF0 erwartet, was genau mache ich falsch?
Ist der Code eigentlich brauchbar oder würde man das im Allgemeinen anders machen?
Danke im Voraus.
Durak
-
pgroup = (char *)pt2260->groups;
Dein Problem ist dieser Cast.
-
Bashar schrieb:
pgroup = (char *)pt2260->groups;
Dein Problem ist dieser Cast.
Hi,
leider finde ich den Fehler nicht.
Ist denn die Herangehensweise prinzipiell in Ordnung?
-
Den Fehler würdest du finden, wenn du den Cast weglässt. Dann würde sich nämlich der Compiler über nicht zusammenpassende Typen -- einmal char** und einmal char* -- beschweren. Der Cast drückt gegenüber dem Compiler ein "Sei still, ich weiß was ich tue" aus, was in deinem Fall aber nicht stimmt.
-
Bashar schrieb:
Den Fehler würdest du finden, wenn du den Cast weglässt. Dann würde sich nämlich der Compiler über nicht zusammenpassende Typen -- einmal char** und einmal char* -- beschweren. Der Cast drückt gegenüber dem Compiler ein "Sei still, ich weiß was ich tue" aus, was in deinem Fall aber nicht stimmt.
Hi,
vielen Dank, jetzt habe auch ich es verstanden!