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 hilfeum 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