S.O.S



  • #include <stdio.h>
    
    void first(double target1[], const double source[], int numb);
    void second(double *target2, const double *source, int numb);
    
    int main(void)
    {
        const double source[5] = {1.1,2.2,3.3,4.4,5.5}; 
        double target1[5];
        double target2[5];
    
        int count;
    
        first(target1, source, 5);  //erste function wird benutzt
    
        for (count = 0; count <=5; count++)   //target1 wird rausgespuckt
            printf("%.1lf\n", target1[count]);
            printf("\n")
    
        second(target2, source, 5);  //zweite function wird benutzt
    
        for (count = 0; count <=5; count++)       //target2 wird ausgespuckt
            printf("%.1lf\n", *(target2 + count));
    
    return 0;
    }
    
    void first(double target1[], const double source[], int numb)
    {
        int count;
    
        for (count = 0; count <= numb; count++)  //übertragen der werte von source auf target1
        {
            target1[count] = source[count];
        }
    }
    
    void second(double *target2, const double *source, int dumb)
    {
        int count;
    
        for (count = 0; count <= dumb; count++)  //übertragen der werte von source auf target2
        {
            *(target2 + count) = *(source + count);
        }
    
    }
    

    Ich verstehe nicht warum nach dem compilen die Werte in der ersten function von source nach target1 richtig übertragen werden, in der zweiten function aber nicht. 😕
    Ich konnte den Fehler beheben indem ich die Menge der Elemente in der Array von [5] auf [6] gesetzt habe, aber ich verstehe auch nicht warum es dann funktioniert. Hilfe bitte 😃 .



  • Guck dir mal an, wie oft die Schleifen durchlaufen werden. Sie laufen von index 0 bis inklusive index 5, dh. greifen auf Elemente außerhalb der Arrays zu. Dabei kann alles mögliche passieren, denn das Verhalten ist undefiniert. Hier könnte in der Funktion 'second' die Variable 'count' überschreiben werden, welche direkt nach 'target2' platziert wurde.



  • Ah vielen Dank 😃 jetzt funktionierts aber weißt du auch warum es auch dann klappt wenn man bei den arrays die Elemente auf 6 erhöht sprich double source[6], target1 [6] etc. Es gibt dann ja schließlich immernoch leerstellen.-



  • Weil du dann nicht mehr über die Arragrenzen hinaus zugreifst.

    Ich hoffe, deine for-Schleife sieht jetzt so aus:

    for (count = 0; count <  numb; count++)  
                           ^ da ist der unterschied
    


  • El Oha schrieb:

    Ah vielen Dank 😃 jetzt funktionierts aber weißt du auch warum es auch dann klappt wenn man bei den arrays die Elemente auf 6 erhöht sprich double source[6], target1 [6] etc. Es gibt dann ja schließlich immernoch leerstellen.-

    wenn du weiterhin first und second mit 5 als letztem argument aufrufst, ist das schon ok. kannst an source noch 6.6 dranklaschen.

    du machst es wie dirk schrieb, oder wenn du bei <= bleiben willst, dann ruf first und second mit anzahl_arrayelemente-1 auf.



  • Wenn man die Array dann in irgendeiner Weise benutzt liegt ja die erste Zahl auf der 0 Stelle, ist es dennoch so dass double target1[5] nur 5 Elemente speichern kann?



  • Ja!
    Gültige Indizes sind dann 0, 1, 2, 3 und 4.



  • El Oha schrieb:

    Wenn man die Array dann in irgendeiner Weise benutzt liegt ja die erste Zahl auf der 0 Stelle, ist es dennoch so dass double target1[5] nur 5 Elemente speichern kann?

    wenn du ein array: double target1[5] anlegst, dann hat es 5 elemente.



  • Vielen Dank an euch alle hat mich als Anfänger ein wenig verwirrt.


Log in to reply