Char - Zeiger subtrahieren
-
Hallo Community,
gegeben:
int len;
char *p1, *p2
...
len = (int) (p2 - p1); // Fehler*Fehler:
mit gcc 4.1.2 : invalid operands to binary -
vc2005 : kein Fehlerlen = (int)p2 - (int)p1; // Fehler*
mit gcc 4.1.2 : kein Fehler
vc2005 : Warnung, Zeigerverkürzung von 'char *' zu 'int'( 32bit: char* ist doch 4 byte breit :S, was wird hier verkürzt ? )
Wie kann ich das Problem lösen, ohne bedingte Kompilierung ?
Wie sieht das bei 64 bit aus ? Das sollte so nicht funktionieren,
wenn 64bit zeiger 64Bit breit sind die in ein 'int' quetschen zu
wollen. ok ich könnte auch gleich in __int64 konvertieren oder ?
Aber das löst mein obiges Problem auch nichtVielen Dank für Hilfestellungen.
-
^^nimm für 'len' ptrdiff_t und dann sollte es gehen.
-
danke Dir
nebenher habe ich auch noch weiter gesucht und auch was gefunden
/Wp64 ist eingeschaltet, was die Warnung hervorbringt
len = (__int64)p1 - (__int64)p2 ; // keine Warnung.
ptrdiff_t probiere ich auch gleich mal aus, wenn ich die Definition
dafür gefunden habe, was sich dahinter verbirgt.Edit:
hm
obiges Bsp, geht nur bei MSC. Der gcc kennt __int64 nicht, ich nehme
daher (long long). Ergebnis: warning: cast from pointer to integer of different sizeirgendwie auch klar. Der gcc kennt zwar ptrdiff_t, liefert aber dennoch
obige Fehlermeldung bei len = p1-p2; // error: invalid operands to binary -Edit:
gelöst:
hatte übersehen, unsigned char* p1 und char* p2, nun beide vom gleichen
Typ macht der gcc auch kein Ärger mehr
-
RED-BARON schrieb:
Der gcc kennt zwar ptrdiff_t, liefert aber dennoch
obige Fehlermeldung bei len = p1-p2; // error: invalid operands to binary -ptrdiff_t sollten die meisten compiler kennen. ach, so:
ptrdiff_t len = (ptrdiff_t)p1 - (ptrdiff_t)p2;