Char erhöhen
-
mathias_80 schrieb:
*argumente[1]++;
funktioniert nicht.
klar, das sagte ich bereits, "A" ist read-only.
mathias_80 schrieb:
int ascii = (int) argumente[1]; ascii = ascii +1; argumente[1] = (char) ascii;
auch nicht. Compiler: "cast from pointer to integer of different size".
Ich wiederhole mich ungern, aber denk nach, was du da geschrieben hast. Was ist der Unterschied zwischen
argumente[1] = (char) ascii;
und
*argumente[1] = (char) ascii;
??? Einfach kurz überlegen und dann merkst du es sofort. Außerdem ist zeigt arguments[1] auf Read-Only Bereich, den du nicht überschreiben kannst.
Mein Compiler läßt solche Späße zu, das OS auch ...
welche Späße meinst du genau?
-
Die Späße:
Mein Aztek-Compiler trennt nur zwischen Code- und Datensegment, da gehen solche
Sachen problemlos (kann man schön am Assembler-Output nachverfolgen).Die moderneren Compiler legen ja bald für jeden String ein eigenes Segment an ...
-
Scheppertreiber schrieb:
Mein Compiler läßt solche Späße zu, das OS auch
der compiler müsste eigentlich stringkonstanten in ein read-only segment stecken. d.h. es gibt eigentlich nur 2 möglichkeiten: eine exception (vom os oder der cpu) beim schreibzugriff, oder es passiert einfach gar nichts. aber niemals sollte aus dem A ein B werden. also: schnell den compiler oder das os wechseln.
-
In C gibt's noch ganz andere Späße
Ich bestimme was ein Programm macht - niemand anderes.
Sonst kann ich gleich Basic oder so einen Müll nehmen.
-
Scheppertreiber schrieb:
In C gibt's noch ganz andere Späße
erzähle...
Scheppertreiber schrieb:
Ich bestimme was ein Programm macht - niemand anderes.
das ist ja auch richtig so, aber an ein paar wenige regeln sollte man sich schon halten. was haben read-only segmente für einen sinn, wenn man sie doch beschreiben kann? wenn du schon code schreibst, der stringkonstanten manipuliert, dann mach wenigstens 'nen fetten kommentar drüber, etwa wie:
/** * BUGBUG: This only works with aztec and DOS 1.0!!!! **/
-
So manchmal nehme ich den Aztek noch - er kann aber leider keine langen
Dateinamen (nicht so toll). Ansonsten klein, schnell, praktisch.Wenn Du richtige Späße mit C willst, dann schau Dir das Windows-Api an.
Wenn das mal Open Source wird, gibt es OS nicht mher (die haben sich totgelacht).*prost* (schaue gerade Otti :-))
-
kk
-
kk ?
-
hm und was soll an der winapi so witzig sein? nenn doch mal ein konkretes beispiel bitte.
-
Huch. So geht es:
#include <stdio.h> int main(void) { char b[] = "A"; char *string[4]; string[1] = b; (*string[1])++; printf("Nachher: %s\n", string[1]); return 0; }
-
genau, ich hoffe, du hast verstanden, warum.