Void Pointer



  • Hallo,

    Ich habe da ein Problem, ich verstehe die Void Pointer nicht richtig, also der Code:

    int main(void)
    {
        char string[20]="seawas ma frend";
        void *pPointer=NULL;
    
        pPointer=(char*)&string[0];
        *(pPointer+4)='e';
        printf(string);
        return 0;
    }
    

    in zeile 6 schreit der compiler:dereferencing void *pointer
    was heist das, warum kann ich den 4 wert des arrays nicht veränder???
    erbitte hilfe



  • Du kannst auf void* weder Zeigerarithmetik machen noch diese dereferenzieren.



  • Der Compiler hat wie immer recht.

    int main()
    {
        char string[20]="seawas ma frend";
        void *pPointer=string;
    
        string[3]='e';
        ((char*)pPointer)[3]='e'; /* äquivalent zur vorigen Zeile */
    
        printf(string);
        return 0;
    }
    


  • transcend schrieb:

    in zeile 6 schreit der compiler:dereferencing void *pointer
    was heist das, warum kann ich den 4 wert des arrays nicht veränder???
    erbitte hilfe

    um dereferenzieren zu können, muss der Compiler wissen, wie viele Bytes er lesen/schreiben muss. Diese Information hat er aus dem Typ des Zeigers. Ein void-Zeiger ist typenlos, für den Compiler ist das nur der Anfang eines Blockes, der 1 Byte lang sein kann oder genauso gut 10 Gigabyte lang sein kann. Woher soll der Compiler wissen, wie viele Bytes er lesen/schreiben soll?

    //edit:

    printf(string);
    

    kann böse ins Knie gehen. Wenn du kein Format string hast, dann unbedingt puts nehmen.

    #include <stdio.h>
    
    int main(void)
    {
        char string[] = "Das geht sowas von %s 100% schief\n";
    
        puts(string);
        printf(string);
        return 0;
    }
    


  • Vielen Dank für eure Hilfe und eure Zeit


Anmelden zum Antworten