Hallo, ich studiere E-Technik im 2. Semester, lerne gerade für unsere Informatik Klausur, in der wir die Programmiersprache C behandeln und wundere mich über eine Lösung, die ich mit meinem zwar mit meinem Übungsgruppenleiter ausgearbeitet habe jedoch meiner Meinung nach ein Teil fehlt.
Hier erst einmal die Aufgabe:
- Legen Sie eine Struktur test_struct an, die als Elemente die Variablen int a, float b, char *c enthaelt.
- Definieren Sie mittels typedef einen neuen Datentypen mystruct fuer diese Struktur.
- Deklarieren Sie einen Pointer vom Typ mystruct. Allozieren Sie nun dynamisch Speicher fuer 20 Elemente vom Typ mystruct und lassen Sie den soeben deklarierten Pointer auf diesen allozierten Speicherbereich zeigen.
- Geben Sie den Speicherbereich wieder frei.
- Legen Sie nun ein Array mit Platz fuer 20 Pointer vom Typ mystruct an. Initialisieren sie diese 20 Pointer indem Sie Sie nun mit Hilfe einer Schleife fuer jeden dieser Pointer Platz fuer 100 Elemente vom Typ mystruct allozieren. Allozieren sie ferner fuer den Pointer char *c jeder Struktur Speicherplatz fuer 100 Elemente vom Typ char.
- Initialisieren Sie fuer alle eben allozierten Elemente die Variable a mit 1, die Variable b mit 2.0 und c mit "test".
- Geben Sie den allozierten Speicherbereich wieder frei.
Problem an dem folgenden Code ist, das ich bei Punkt 5. keinen Speicherbereich für char *c alloziere. Jedoch bin ich ein wenig hilflos an welcher Stelle ich dies tun sollte.
Hier meine Lösung:C
Alles anzeigen#include <stdio.h> #include <stdlib.h> int main() { struct test_struct { int a; float b; char *c; }; typedef struct test_struct mystruct; mystruct *pm; pm = (mystruct*) malloc(20 * sizeof(mystruct)); free(pm); mystruct *str[20]; int i; for (i = 0; i < 20; i++) { str[i] = (mystruct*) malloc(100 * sizeof(mystruct)); str[i]->a = 1; str[i]->b = 2.0; str[i]->c = "test"; } free(str); return 0;
Die einzige Idee die ich hätte wäre, mit in die for Schleife, bevor ich c initialisiere:
"str[i]->c=(char*)malloc(100*sizeof(char);
hineinzubringen. Jedoch zweifle ich noch an der Richtigkeit.ich würde mich über Tipps, Kommentare oder Hinweise freuen.
Gruß Harry