2016-05-27 11 views
0

Ich muss eine Funktion schreiben, in C unter Linux, um generische Daten zu lesen oder zu schreiben.GCC Warnung: Zeigerarithmetik mit Typ void *

Ich kann große Daten lesen (oder schreiben), also habe ich eine Weile gebraucht, wie viele Bytes ich gelesen habe. Beim nächsten Aufruf lese ich zum Beispiel den Originalzeiger + wie viele Bytes ich gelesen habe. Aber ich kenne den Typ nicht, also habe ich eine Lücke verwendet * aber gcc sagt:

membox.c: In function ‘myRW’: 
membox.c:301:22: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith] 
w = read(fd, data + (s*type) , len - s); 
       ^
membox.c:308:23: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith] 
w = write(fd, data + (s*type) , len - s); 

Kann ich das tun? Ich sollte diese Warnungen ignorieren?

+0

'char *' ist wahrscheinlich der Zeigertyp, den Sie für die Arithmetik verwenden möchten. – Flexo

+1

OT: Diese 'long int's sollten auch' size_t's sein. – alk

+0

OT^2: Nach Konvention wird bei Fehler '-1' zurückgegeben. – alk

Antwort

3

Werfen Sie die void * auf char *. Auf diese Weise haben Sie einen zugrunde liegenden Typ der Größe 1, um die Zeigerarithmetik auszuführen.

(char*)data + (s*type) 
Verwandte Themen