Don_Pazo Geschrieben 30. Juni 2005 Teilen 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 ??????*/ } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mephisto81 Geschrieben 30. Juni 2005 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Don_Pazo Geschrieben 30. Juni 2005 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mephisto81 Geschrieben 30. Juni 2005 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Don_Pazo Geschrieben 30. Juni 2005 Autor Teilen 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); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mephisto81 Geschrieben 30. Juni 2005 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Don_Pazo Geschrieben 30. Juni 2005 Autor Teilen 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]); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.