joa, nun ist es wohl oder übel so weit. Ich muss nun in der Schule C lernen.
Dank meiner derzeitigen Erkrankung musste ich auch eine C Vorlesung ausfallen lassen und da wurde auch wohl das behandelt, wo ich grad bescheitere. Also:
Wir sollen ein Programm schreiben, was auf einen Parameter reagieren soll.
Dafür muss ich herausfinden, ob es sich um eine Hex-Zahl (0x...) oder um eine Dezimalzahl handelt.
Nun wollte ich einen String definieren, der zwei Zeichen lang ist, um dort die ersten beiden Zeichen des Parameters zu speichern. Wir sollen dafür sscanf() benutzen.
Alles schön und gut aber ich bekomm es irgendwie nicht hin, einen String zu definieren. Hab da schon mein schlaues Buch gewälzt und bin nun auf folgenden Code gekommen:
Allerdings meldet der Compiler den Fehler "warning: char format, pointer arg (arg 3)" (In Zeile 9)
Was mache ich hier falsch?
x selber ist schon ein Pointer. Du übergibst somit den Pointer auf den Pointer auf den Start der Array. Ausserdem musst du darauf achten, dass x zu kurz wäre, am Ende würde ja noch ein \0 hinzugefügt werden. Daher solltest du char x[3]; verwenden und dann bei sscanf "%2s" damit nicht versucht wird zuviel unter x abzuspeichern.
Dein String x ist nur 2 Zeichen lang. Du brauchst 3 Zeichen, weil die meisten Funktionen in C ein 0-Byte als Markierung für das Stringende erwarten.
Das zweite Argument von sscanf müsste "%2s" lauten, um einzuschränken, dass du nur 2 Zeichen lesen willst. Sonst könntest du evtl. Probleme mit Überläufen kriegen.
Der letzte Parameter sollte x sein und nicht &x. Ein String (bzw. eigentlich ein char-Array) ist intern ja schon ein Pointer auf das erste Zeichen. Da musst du nicht noch einen Pointer draus machen. Daher kommt die Fehlermeldung
Darüber läuft schon seit Bekanntgabe der Aufgabe eine hitzige Diskussion aber wir sollen sscanf benutzen um zu lernen, wie dieser Befehl funktioniert.
Wäre mir auch lieber, wenn ich darauf verzichten könnte.