Zugriffsfehler?



  • Hi

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 20
    int main(void) {
       char str1[MAX];
       char str2[] = "Ein Teststring welcher laenger"
                     " als 20 Zeichen ist";
       strncpy(str1, str2, MAX);
       str1[MAX] = '\0'; // Das ist doch die 21. Position, oder nicht?
       printf("%s\n",str1);
       return EXIT_SUCCESS;
    }
    

    Der Code hier schreibt doch über die Arraygrenzen, oder hab ich was falsch verstanden?

    Thx



  • Verunsicherter schrieb:

    str1[MAX] = '\0'; // Das ist doch die 21. Position, oder nicht?
    

    in der tat, das ist sie 🙂 dies muss aber nicht zwangsläufig zu einem speicherzugriffsfehler führen 😉 in diesem falle spielst du halt ein wenig mit deinem stackspeicher rugby 😃



  • Naja, aber in einem Tutorial muss man das nicht gerade als didaktisch wertvoll werten, oder?
    Außerdem ist ja nicht gesichert, dass die Speicherstelle nicht überschrieben wird. Position 21 wurde ja nicht rechtmäßig angefordert, sondern einfach gehijackt.



  • Verunsicherter schrieb:

    Naja, aber in einem Tutorial muss man das nicht gerade als didaktisch wertvoll werten, oder?

    nein, aber solchen mist findet man selbst in büchern 🙂

    Verunsicherter schrieb:

    Außerdem ist ja nicht gesichert, dass die Speicherstelle nicht überschrieben wird. Position 21 wurde ja nicht rechtmäßig angefordert, sondern einfach gehijackt.

    yup 🙂



  • sothis_ schrieb:

    Verunsicherter schrieb:

    Naja, aber in einem Tutorial muss man das nicht gerade als didaktisch wertvoll werten, oder?

    nein, aber solchen mist findet man selbst in büchern 🙂

    der code ist bestimmt aus 'c von a-z'
    🙂



  • fricky schrieb:

    sothis_ schrieb:

    Verunsicherter schrieb:

    Naja, aber in einem Tutorial muss man das nicht gerade als didaktisch wertvoll werten, oder?

    nein, aber solchen mist findet man selbst in büchern 🙂

    der code ist bestimmt aus 'c von a-z'
    🙂

    oder aus "lerne [...] in 21 tagen", lol



  • Verunsicherter schrieb:

    Der Code hier schreibt doch über die Arraygrenzen, oder hab ich was falsch verstanden?

    Ja und strncpy ist sowieso eine kaputte Funktion (selbst für die C Standardlib). Am besten gar nicht erst verwenden!



  • rüdiger schrieb:

    Verunsicherter schrieb:

    Der Code hier schreibt doch über die Arraygrenzen, oder hab ich was falsch verstanden?

    Ja und strncpy ist sowieso eine kaputte Funktion (selbst für die C Standardlib). Am besten gar nicht erst verwenden!

    Kaputt? Was? Nee, ne?



  • Es macht entweder zu viele oder zu wenig 0en. Im Grunde ist die Funktion unbrauchbar.

    So etwas wie strlcpy aus OpenBSD macht dagegen mehr Sinn.



  • der code ist bestimmt aus 'c von a-z'

    Genau richtig. Ich habe das mittlerweile zur Hälfte durchgelesen und behaupte jetzt einfach mal ganz dreist, dass der Autor sich keine Mühe gegeben hat. Die Code-Beispiele sind durchwegs kaputt, blödsinnig, abstrus; die Erklärungen ungenau bis falsch. Da ich auf sowas echt verzichten kann, seh ich mich jetzt nach einer anständigen Lektüre um. Eure Empfehlungen sind natürlich willkommen. Das Buch darf dabei auf Deutsch oder Englisch sein, solange darin klar und tiefgründig erläutert wird.

    @rüdiger: Danke für deinen Tipp.



  • Aus dem Hanser Verlag.
    Autor ist Ulrich Breymann.
    Titel: C++ Einführung und professionelle Programmierung

    Ist Auflage 9, noch recht neu.

    Gut erklärt wenn auch manchmal verwirrend. Aber man lernt gut mit diesem Buch.

    PS: Es geht nichts über ein gutes Buch.



  • @doofkopp: Das Buch hab ich schon gelesen. Es geht hier allerdings um C, nicht C++. 😉



  • Willst du ganz von vorn beginnen zu lernen?
    Da hätte ich was:
    'C als erste Programmiersprache' von Goll/Grüner/Wiese

    Das hat allerdings nicht so viele Programmbeispiele. Kannst dir ja mal die Rezensionen bei Amazon oder so durchlesen.


Anmelden zum Antworten