Veröffentlicht 30. Juni 200520 j Es geht um eine Aufgabe aus der Schulle, die ich leider nicht lösen kann. Bitte weist jemand wie ich sie lösen kann ?? Schreiben Sie ein C-Programm, das in einem Array von Zeigern auf „char“ maximal 10 Zeichenketten verwaltet. Der Speicher für jede Zeichenkette im Array soll dynamisch angefordert werden. Geben Sie nach erfolgter Eingabe alle Zeichenketten aus sowie die Gesamtanzahl eingegebener Zeichen. #include <stdio.h> #include <malloc.h> #include <string.h> void main() { char *array[10]; char temp[80]; /*Code ??????*/ }
30. Juni 200520 j hallo, ich glaube nicht das dir hier jemand deine Hausaufgabe komplett lösen wird, denn du sollst ja schließlich was daraus lernen. Wo liegt denn genau dein Problem? Weißt du nicht wie man Speicher dynamisch allokiert unter C? Weißt du nicht wie du die Eingabe realisieren sollst? Schau dir die Dokumentationen der Funktionen malloc() realloc() und getch() und vielleicht auch scanf() (allerdings für diese Aufgabe nicht unbedingt zu empfehlen) an vielleicht hilft dir das schon. (/edit: google.de ist dein freund ) gruss mep
30. Juni 200520 j mein problem ist, wie ich von char * array[10]; und char temp[80]; ein zweidimensionales feld realisieren kann. Nur so kann ich 10 Einträge speichern? Das ist was ich nicht verstehe
30. Juni 200520 j naja du musst eben nachsehen wieviele zeichen eingegeben wurden und dann für jede Eingabe den nächsten der 10 Zeiger mit den Daten füllen. Also zum Beispiel: for(int n = 0; n < 10; n++) { // [Eingabe vom User fordern und in temp speichern zum Beispiel mit scanf wenn du mit einer festen Breite arbeiten darfst] array[n] = (char*)malloc(strlen(temp) + 1); // +1 wegen terminierender null in c-strings strcpy(array[n], temp); } (nicht getestet aber sollte klappen) Hoffe das hilft dir weiter. Gruss mep
30. Juni 200520 j Danke für die Hilfe, nur noch am Ende soll ich die Zeiger frei zu geben: free(array); // oder durch for (int i=0; i < 10; i++){ free(array); }
30. Juni 200520 j Für jedes malloc muss prinzipiell ein free gemacht werden sonst bekommst du sehr hässliche memory-leaks (Speicher der per malloc angefordert wurde aber nicht mehr freigegeben wurde durch free). gruss mep
30. Juni 200520 j Danke für alles, ich möchte schliesslich das Programm presentieren. :marine /* === Aufgabelösung === */ #include <stdio.h> #include <malloc.h> #include <string.h> void main(){ char *array[10]; char temp[80]; int kette = 0; int anzahl =0; int gesamt =0; // 10 Array-s schaffen while(kette < 10){ printf("String eingeben (max 79 Zeichen)\n->"); gets(temp); array[kette] = (char *) malloc(sizeof(temp) + 1); strcpy(array[kette],temp); kette++; } for(kette = 0; kette < 10; kette++) { strcpy(temp,array[kette]); // Anzahl suchen while (temp[anzahl] != '\0' ) { anzahl++; } // Ausgabe alle Zeichenketten printf("array[%i] %s \t = %i Zeichen\n",kette,array[kette], anzahl); gesamt += anzahl; anzahl=0; } printf("\nGesamt sind in %i Zeichenketten %i Zeichen\n", kette, gesamt); // Zeiger freigeben for(kette =0; kette<10;kette++){ free(array[kette]); } }
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.