Don_Pazo Geschrieben 30. Juni 2005 Geschrieben 30. Juni 2005 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 ??????*/ }
Mephisto81 Geschrieben 30. Juni 2005 Geschrieben 30. Juni 2005 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
Don_Pazo Geschrieben 30. Juni 2005 Autor Geschrieben 30. Juni 2005 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
Mephisto81 Geschrieben 30. Juni 2005 Geschrieben 30. Juni 2005 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
Don_Pazo Geschrieben 30. Juni 2005 Autor Geschrieben 30. Juni 2005 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); }
Mephisto81 Geschrieben 30. Juni 2005 Geschrieben 30. Juni 2005 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
Don_Pazo Geschrieben 30. Juni 2005 Autor Geschrieben 30. Juni 2005 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]); } }
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden