zeiger



  • ich bins leider schon wieder, aber als anfänger mit einem schönen aber schwierigen buch, möchte ich ja nicht immer abschreiben und aus diesem grund, wollte ich aus einem programm meine eigenes programm machen.

    es geht um pointer:
    das ist das ursprungssprogramm

    void main()
    {
    int x=4711;
    int *zeiger;
    zeiger=&x;
    printf("x=%d\n",x);
    printf("zeiger=%d\n",zeiger);
    printf("*zeiger=%d\n",*zeiger);
    }
    

    und ich wollte nun anstatt integer mal etwas mit char ausprobieren und habe folgendes geschrieben:

    char hallo=hallo;
    char du=du;
    char ich=ich;
    char du=du;
    char er=er;
    char sie=sie;
    char es=es;
    char wir=wir;
    char ihr=ihr;
    
    char *hallo;
    char *du;
    char *ich;
    char *du;
    char *er;
    char *sie;
    char *es;
    char *wir;
    char *ihr;
    

    ist eigentlich der gleiche aufbau, also der character heißt hallo und da steht hallo drin.
    aber da kommt immer folgendes:

    error C2040: 'ich': 'char *' unterscheidet sich von 'char' in Bezug auf die Anzahl vorgenommener Dereferenzierungen
    😮 😮 😮 😮 😮 😮 😮 😮 😮



  • völlig falsche syntax^^
    entweder 'char hallo[] = "hallo";' <-- array
    oder 'char *hallo = "hallo";' <-- pointer
    ein 'char hallo;', weder mit pointer-sternchen noch mit array-klamern fasst nur ein einzelnes zeichen.
    falsch wäre daher z.b. sowas: char hallo = "hallo";
    🙂



  • hast du in einem Quellcode beide setehen also

    char tmp;
    char *tmp;
    

    du musst sowas machen

    char tmp[] = "hallo";
    

    Dann sollte das schonmal laufen..



  • stoeoe schrieb:

    ist eigentlich der gleiche aufbau, also der character heißt hallo und da steht hallo drin.

    Da hast Du Dein Problem: Eine Zeichenkette ist kein Zeichen ( char ).

    greetz, Swordfish



  • okay, vielen dank erst mal, also geht das nur so:

    char puffer[128];
    
      strcpy(puffer, "hallo");
      strcat(puffer, "du");
    

    gibt es keine einfachere variante?



  • char puffer[] = "hallo du";
    

    dann ist er aber auch nur so lang wie die Zeichenkette die du übergibst.



  • lippoliv schrieb:

    char puffer[] = "hallo du";
    

    dann ist er aber auch nur so lang wie die Zeichenkette die du übergibst.

    char puffer[128] = "hallo du";
    

    🙂



  • ja so gehts auch...



  • ich wollte ja damit zeiger usw üben, aber wenn ich das so

    char puffer[128] = "hallo du";
    

    mache, dann ist das ja einfach nur nen char der den inhalt hat und wie bekommt das dann einen namen? so:???

    char hallo puffer[128] = "hallo du";
    


  • Der Name ist "puffer" du kannst allso

    printf( "%c", puffer+i ); //oder
    printf( "%s", puffer );
    

    schreiben.

    Du kannst (um Zeiger zu üben) sowas machen:

    char *myBuffer;//pointer auf char-speicherbereich erstellen
    myBuffer = malloc( sizeof(char)*128 );//speicher reservieren
    strcpy( myBuff, "hallo" );//in speicher schreiben
    myBuff[strlen(myBuff)+1] = '\0'; //array beenden
    printf( "%s", myBuff );//array ausgeben
    

    Das währe dann Pointer



  • lippoliv schrieb:

    [cpp]
    ...
    myBuffer = malloc( sizeof(char)*128 );//speicher reservieren
    ...

    haste nicht Tims neustes tutorial gesehen?
    mach es so: myBuffer = malloc (128*sizeof(*myBuffer));
    und wo ist dein 'free' hin, häää?
    🙂



  • lippoliv schrieb:

    char *myBuffer; /* und am besten mit 0 initialisieren */
    myBuffer = malloc( sizeof(char)*128 ); /* wobei man sich sizeof( char ) sparen kann ( immer 1 ) */
    strcpy( myBuff, "hallo" );
    myBuff[strlen(myBuff)+1] = '\0'; /* Wenn strcpy die '\0' nicht schreibt, wie ermittelt dann strlen die länge ;) */
    printf( "%s", myBuff );
    

    Gut, dass strcpy auch eine abschließende 0 schreibt.

    greetz, Swordfish



  • @Swordfish: ja ich war mir nicht mehr sicher obes das tut... Habs sicherheitshalber gemacht...

    @tutorial-freak: meine Zeile is übersichtlicher mit "sizeof(char)" da sihet man gleich was es ist...

    ja ich und free oder fclose... Ich vergess die immer... Wieso kann das Programm da nich einfach abstürzen oder mein Compiler meckern? Dann würd ichs lernen... Natürlich muss da noch ein "free(myBuff);" drunter.



  • Wenn strcpy( ) die Null nicht setzen würde, dürfte sich dein Code ( myBuff[ strlen( myBuff ) + 1 ] = '\0'; ) mit Fug und Recht aufhängen. Wie zum Teufel soll strlen( ) denn die Länge ermitteln!? Raten?

    greetz, Swordfish



  • danke, auch wenn ich denn rest noch nicht ganz verstehe, aber bald! 😉



  • Stimmt auch wieder 😉


Anmelden zum Antworten