Zeiger: Feld von Zeigern, was auf Felder verweist.
-
Hellooo,
kleines Problem, wäre schön wenn jemand die Zeit dazu fände es sich mal kurz anzuschauen.
Versuche mal kurz zu schildern was ich versuche und wie ich daran scheitere:
Ziel ist es, N Strings einzulesen (strings < 100) und die angelegten Felder/Strings die richtige Größe haben (d.h keine Speicherplatz verschwendung).
Die Idee war ein Feld von Zeigern anzulegen und dann mittels dynamischen Speicher jedem dieser Zeiger ein String der richtigen Größe zuzuordnen (klappt auch).Mein Problem ist nun, dass ich einfach nicht mehr den Zugriff auf die gespeicherten Wörter/Strings erlange. Zeile 29 (einer vieler kläglichen Versuche) druckt mir einfach eine komische Zeichenkette aus.
#include <iostream> #include <stdio.h> void test (char* a) { char s[100]; //maximal Größe des einzlesenden Strings int i=0; /// Wörter werden gelesen scanf("%c", &s[0]); while (s[i] != '\n') { i++; scanf("%c", &s[i]); } /// a = new char[i]; //Feld mit passender Größe i--; while ( i >= 0 ) { // Hier soll das Wort in den dynamisch angeforderten Speicher eingtragen werden *(a+i)=s[i]; i--; } } int main() { char* a[3]; for(int i=0; i<=2; i++) test(a[i]); printf("%s\n%s\n%s", a[0],a[1],a[2]); return 0; }Danke im Voraus!!!
-
Benutze std::string und std::vector!
-
Okay ich probier das mal, danke!
-
Womit lernst du C++? Sieht aus als ob du mit einem sehr schlechten Buch oder einem schlechten Online Tutorial arbeitest. Dein Code ist nämlich eine komische Mischung aus C und C++.
Schau einmal in der FAQ nach einem guten C++ Buch. Es ist leider Tatsache, dass die Online Tutorials zu C++ sehr schlecht sind... meistens weil die Autoren offenbar selber zu wenig von C++ verstehen. Um richtig C++ zu lernen lohnt es sich ein gutes Buch zu kaufen.
-
Welche Programmiersprache soll es denn werden?
C oder C++
Wenn du C und C++, vor allem bei der dynamischen Speicherverwaltung, mixt, sind Probleme fasst automatisch die Folge.Mannis Tipp zeigt in die richtige Richtung für eine C++ Lösung. Ich befürchte aber, das das mit deinem Lehrmaterial kollidiert? Wenn du da frei wählen kannst, versuche Mannis Weg zu lernen.
Sonst noch mal deine Unterlagen heraus holen, überlegen ob es C oder C++ werden soll oder gar noch etwas anderes und dann systematisch an den Quelltext heran gehen.
-
Naja, eigentlich lerne ich mit dem Skript vom Prof.
Die Sache ist halt, wir hatten im ersten Semester C und nun C++ (beim gleichen Prof.)
Er meinte wir können alles aus C übernehmen, das macht wohl dem Compiler keine Umstände und er führt halt manche Dinge nach und nach nochmal in C++ ein, halt die ganzen kleinen Erleichterungen. Aber die std:: schreibweise ist mir noch völlig neu.
Da werde ich Montag nochmal in die Bibo gehen und mich nicht zu sehr auf Skript/Onlinerecherche versteifen.Vielen Dank für die Antworten!!!
-
Das sind keine sogenannten "Erleichterungen", das sind ganz andere Sprach- und Programmierparadigmen.
Und mittlerweile sind C und (Modern-)C++ als zwei komplett verschiedene Sprachen anzusehen. Ja, C++ baute auf C auf und ist zum größten Teil auch heute noch eine Obermenge. Aber die Konzepte sind ganz andere. Beispiel, eigene Speicherverwaltung aus C und Exceptions aus C++.