Fehlersuche in kleinem Programm



  • Danke, das hoff ich auch (und glaube das kann ich auch, was ich mir in den Kopf gesezt habe will ich! 😃 )

    Gerade Pointer, Arrays durchgemacht und jetzt bei den Strings 😮
    ziemlich happig, aber das kommt gut 🕶



  • also die strings sind einfach

    also ich meine die klasse damit
    ist quasi wie im (noob)-java
    relativ einfach...

    pointer sidn an sich auch nicht schwer aber man muss irgendwie immer etwas um die ecke denken
    und da muss man sich etwas dran gewöhnen

    arrays sind ganz einfach, aber nach kurzer zeit sind das eig auch schon nur noch pointer auf sonstwas...



  • Für was sind die Arrays eigentlich, der wirkliche Nutzen wird in meinem Buch nicht erklärt, auch im Internet ist auf die schnelle kein konkretes Beispiel zu finden... 🙄

    Ist es für Grafikberechnungen?? 😕

    Morgen ist ja eh wiedermal ein repeat-day^^



  • Arrays sind quasi starre Container für beliebige Datentypen. Du kannst also zum Beispiel die monatlichen Umsätze von einem Unternehmen als long speichern ohne das du 12 Variablen anlegen musst und wenn du dann zum Beispiel den Umsatz vom Februar willst kannst du über den Index 1 darauf zugreifen (weil ja bei 0 angefangen wird zu zählen).

    MfG



  • OK danke für deine Antwort, ist mir jetzt schon klarer 🙂



  • arrays sind auf gut deutsch ein speicher für einen datentyp mit einer bestimmten grösse

    für manche probleme (primzahlberechnung per brute force oder wahrscheinlichkeiten bzw mittelwerte) braucht man halt 10000 zahlen um es zu lösen
    ja und man könnte jetzt 10000 variablen einzeln erstellen
    oder eben arrays benutzen:

    int a1, a2, a3, a4, ..., a10000;   // 10000 einzelne variablen
    int a[10000];                      // ein array mit 10000 speicherplätzen
    


  • Noch ne kleine Frage:

    #include <iostream>
    #include <cstring>
    
    char String1[12];
    char String2[6];
    
    using namespace std;
    
    int main(void)
    {
        strcpy(String1, "Hello World");
    
        cout << String1 << '\n';
    
        strcpy(String2, String1);
    
        cout << String2 << endl;
    }
    

    Ich find da im Buch & Google keine Antwort, wieso kann String2 den Wert "Hello World" aufnehmen obwohl ich ihn mit 6 definiert habe 😕
    Wird da der Wert gleich mitkopiert? Kann man also nicht so direkt das Programm zwingen nur "Hello" auszugeben?



  • Du hast einfach Glück gehabt. String2 bietet nur für 6 Zeichen Platz (inklusive abschliessendem '\0'). Das heisst, du schreibst in irgendeinen Speicherbereich. Das Verhalten davon ist undefiniert, deshalb kann es funktionieren, aber auch nicht. Gewöhn dir jedoch an, das nicht so zu machen.

    Um die 5 Zeichen (fünf, wegen Nullterminierung) zu erzwingen, kannst du die Funktion strstr() , die einen Teil des Strings zurückgibt, verwenden.

    In diesem Zusammenhang möchte ich dich aber gerade auf die C++-Klasse std::string aufmerksam machen, die einiges vereinfacht und dir die Speicherverwaltung abnimmt.



  • Hab doch gedacht dass ich sowas schon gelesen habe 😃

    Zufall heisst wohl, dass diese Speicheradresse nicht von anderen Programmen besetzt ist 😉

    Werds mir jedenfalls nicht angewöhnen - danke 🙂



  • Skyese schrieb:

    Zufall heisst wohl, dass diese Speicheradresse nicht von anderen Programmen besetzt ist ;))

    Nein, normalerweise haben andere Programme auf 32-Bit-Systemen dank virtuellem Adressraum keinen Zugriff auf den Arbeitsspeicher für das Programm.
    Es kommt eben drauf an, möglicherweise steht an der Stelle bereits ein Wert, oder die Adresse kann nicht beschrieben werden, oder sie ist einfach ungültig. Speicher, den du nicht reserviert hast, solltest du niemals beschreiben.

    Hauptsache, du merkst dir std::string 😉


Anmelden zum Antworten