Ichs habs nun mit entsprechenden casts gelöst, aber ich frag mich schno grad was das genau bewirkt.
Vielleicht tut der Cast gar nichts, wahrscheinlich tut er aber gar nichts.
Also. Per Definition ist char in allen Eigenschaften völlig identisch mit signed char oder unsigned char. Welches, das weiß man nicht. Aber:
- Vielleicht ist bei dir gerade char == unsigned char, dann tut der Cast gar nichts und kann somit auch keine negativen Auswirkungen haben.
- Wahrscheinlich macht es auch nix, wenn bei dir char == signed char ist. Die Bitmuster einander entsprechender Zeichen in signed/unsigned char sind gleich (das könnte ich glaub ich mit Hilfe des Standards beweisen, wenn es sein muß). Daher kann man bei der Verwendung der Zeichen als Zeichen keinen Effekt sehen. Wenn sie mit ihren Strings rechnen, ist die Lage aber eine andere.
Die Interpretation von char ist nicht im C-Standard definiert und daher plattform-spezifisch. -fsigned-char bzw. -funsigned-char stellen beim gcc ein ob char signed oder unsigned interpretiert wird und sollten dein Problem ohne Casts beheben, sofern der restliche Code konsistent in der Verwendung von signed und unsigned char ist.
Nein, char ist ein eigener Typ, auch wenn die Darstellung zu einem der beiden anderen Typen identisch ist. Daher sind die Pointertypen auch unterschiedlich, und da gibts in C keine stillen Umwandlungen außer bei void *. GCC warnt hier überhaupt nur mit -ansi -pedantic, dann aber korrekterweise auch mit -f(un)signed-char.