Programm zum Thema Strukuren
-
Hallo!
Dieses Programm soll Strukturelemente erstellen und diese ausgeben. Die Daten für die Strukturelemente sind in in der Funktion createAllPresents zu finden. Weiters soll eine Funktion(searchSack) ein gewisses Strukturelement aus dem Array, in dem die Strukturelemente gespeichert sind heraussuchen.
Windows meldet, dass es das Programm schließen muss. Syntax Fehler findet der Compiler keine. Was stimmt daran nicht?#include<stdio.h> #include<stdlib.h> struct Present{ char name[50]; int guci; }; struct Present* createPresent(char*n, int g){ struct Present* new=(struct Present*)malloc(sizeof(struct Present)); int i; for(i=0;*(n+i)!='\0';i++){ new->name[i]=*(n+i); } new->name[i+1]='\0'; new->guci=g; return new; } void outputPresent(struct Present*x){ int i; for(i=0;x->name[i]!='\0';i++){ printf("%s",x->name[i]); } printf("%i",x->guci); } struct Present* searchSack(struct Present**array,int guci){ int i=0; struct Present*w=NULL; while(i<=14){ if(array[i]->guci=guci) w=array[i]; i++; } return w; } void freeAllPresents(struct Present**array){ int i; for(i=0;i<=14;i++){ free(array[i]); } } void createAllPresents(struct Present**array) // struct Present**array ist Zeiger auf 1. Element eines struct Present* Arrays { array[0] =createPresent("a", 20); array[1] = createPresent("Slurm XL", 10); array[2] = createPresent("Tricorder", 25); array[3] = createPresent("Fluxkompensator", 7); array[4] = createPresent("Kaminausbau XXL", 13); array[5] = createPresent("Phaser Drucker", 23); array[6] = createPresent("Windows 13", 27); array[7] = createPresent("100 Jahre Stirbt Langsam",3); array[8] = createPresent("Symphonieorchester", 9); array[9] = createPresent("Weltfrieden", 11); array[10] = createPresent("Weihnachtsbaum", 17); array[11] = createPresent("Laserschwert", 21); array[12] = createPresent("Activity 24h Edition", 24); array[13] = createPresent("Selbstlaufende Biotonne",26); array[14] = createPresent("Kernkraft Selbstgemacht",100); } int main(){ struct Present* array[14]; createAllPresents(array); int i; for(i=0;i<=14;i++){ outputPresent(array[i]); } outputPresent(searchSack(array,100)); freeAllPresents(array); getchar(); return 0; }
-
^^ lass es im debugger laufen, der breakt dann, wo's kracht.
ach ja: malloc bitte nicht casten (hat aber vermutlich mit deinem bug nichts zu tun).
-
Ich habe es jetzt debuggt und mir kommt schon bei der 1. Funktion was merkwürdig vor.Und zwar nimmt i da einen irre hohen Wert an. Ich dachte, wenn ich als Eingabewert einer Funktion wie hier etwas in Anführungzeichen habe, ist das ein Zeiger auf das erste Element des char-Arrays in dem der String gespeichert ist und das letzte Element des char Arrays ist '\0'? Oder muss ich den String noch mit '\0' abschließen?
Danke
mfg
Apeiron
-
void createAllPresents(struct Present**array) { array[ 0] = createPresent("a", 20); array[ 1] = createPresent("Slurm XL", 10); ... array[13] = createPresent("Selbstlaufende Biotonne",26); array[14] = createPresent("Kernkraft Selbstgemacht",100); } int main(){ struct Present* array[14]; // <- :open_mouth: createAllPresents(array); ... }
(Kernkraft ist eh böse)
-
for(i=0;*(n+i)!='\0';i++){ // :open_mouth:
for(i=0;i<49&&*(n+i)!='\0';i++){ // :sunglasses:
wollt nur mal smileys in code tags testen
-
Ok. vielen Dank, das Programm funktioniert jetzt einwandfrei!
Aber noch eine Frage:
Wenn ich eine Struktur habe presentnode, die eine Struktur present enthält welche ein char-array namens geschenk enthält. Wie kann ich darauf zugreifen? Ich habe schon presentnode->geschenk und presentnode.geschenk probiert, leider aber ohne Erfolg. Müsste ich in presentnode extra einen pointer auf present deklarieren, sodass ich presentnode->pointer->geschenk schreibe?
-
struct presentnode{ struct{ char x[10]; }present; }; int main(void){ struct presentnode a; a.present.x[5] = 'A'; }
so sollts doch gehen oder?