String auf Zahlen überprüfen. Wie geht das?

also-w= ist immer ein fester wert. Die Zahl nach dem = Zeichen variiert. also kann -w=4, -w=2, ... stehen
für eine strcasecmp-vergleich, will brauche ich den String "-w=" und die Zahl für Schleifendurchgänge (Zählschleife)

der Teil %s soll in char* zeichen = NULL; gelesen werden (s. Zeile 5 und 7, oben)
 
Zuletzt bearbeitet:
Ich muss beide meiner Fragen nochmals wiederholen:
1. Passt zum Beispiel "-w=2" zum Pattern "%s %d"?
2. In welchen Speicher willst du %s speichern? zeichen ist ein 0-Zeiger.
 
ja -w=2 erhält sscanf aus der Variable "option" der soll lediglich Buchstaben und Zahlen nach "%s%d" in zeichen und zahl splitten. %s = "-w=" und %d z.B. = 2
 
Zuletzt bearbeitet:
Mir ist durchaus bewusst, was du tun willst, jedoch frage ich mich schon bisschen, ob es so wahnsinnig schwer ist immer alle Fragen zu beantworten:
1. Passt zum Beispiel "-w=2" ins Pattern "%s %d" (nicht "%s%d")?
2. In welchen Speicher willst du %s speichern? zeichen ist ein 0-Zeiger.
 
@Muepe32: In seinen "..." wird er wohl irgendwo was speicherbeschaffendes drinhaben...hoffe ich zumindest.
@Davicito: Falls du also kein malloc/new drin hast...
Und free/delete nicht vergessen!

Zum Pattern: Ich würde sagen, das entspricht eher
%s=%d
Ein Leerzeichen wird von scanf als genauso wichtig erachtet wie alles andere, nicht einfach ausgelassen!
Mit meiner Variante kommt scanf aber trotzdem nicht zurecht.
Das letzte = aus ggf. mehreren zu finden wird zu komplex.

Warum teilst du das Ganze nicht einfach selber am = in zwei Teile auf?
Dann weiss man wenigstens, das es funktioniert.

Gruß

PS1: Offensichtlich doch kein malloc...
@Davicito: Statt
char* zeichen=NULL;
mach sowas:
char zeichen[64];

PS2: Wenn "-w=" sowieso immer fix ist, warum ignorierst du es dann nicht einfach?
Kümmer dich nur um die Zahl.
 
Zuletzt bearbeitet:
Ich habe keine Ahnung was du immer mit "In welchen Speicher.. " meinst. Willst du wissen, ob das in den Heap, Stack, Data oder Code-speicher soll? Wenn ja dann logischer weise in den Stack, wo werte von Variablen stehen müssen kann sein das ich da nen Fehler gemacht habe zwischen Zeigern und Nichtzeigervariablen aber du weißt wass ich eigentlich vorhabe. wie sol ich die funktion nun umschreiben?

option ist ein Zeiger der auf den Wert "-w=2" zeigt und soll nun durch sscanf in %s und %d geteilt werden. Wie mache ich das denn richtig?

Gruß.
 
Zuletzt bearbeitet:
Wo hast du denn ein Problem? Die Frage ob "-w=2" dem Pattern "%s %d" entspricht lässt sich doch ganz einfach beantworten: Nein, denn -w=2 hat nunmal kein Leerzeichen drin, "%s %d" jedoch schon.
 
Um meine Ps nocheinmal zu wiederholen:

Speicher:
Heap/Stack ist doch egal.
D/C genauso. Wobei Variablen eher nicht im C sind.

Mit Zeichen hast du einen Pointer, der auf ein char-Array zeigen sollte.
Da du aber "=NULL" machst, statt ein char-Array von irgendwo herzuziehen, wird dein Programm beim Verwenden des Pointers abstürzen.
Mach sowas:
char zeichen[64];

scanf:
Wenn "-w=" sowieso immer fix ist, warum dann nicht gleich so?
sscanf(&...[3],"%d",&...);
 
Achso.. ne ich habe schon mehrere Varianten ausprobiert "s%d%" ohne Blank "%s d%" mit Blank und auch "%s=d%" aber das führt nicht zu dem gewünschten Ergebnis, das ich hinterher -w= in "zeichen" und sagen wir mal 4 in "zahl" zu stehen habe.

Sheel -> ich hab gelesen das es mit sscanf so am Besten funktionieren soll.. nicht mit scanf! Sicher, ich könnte mit strtok teilen.. aber das wollte ich erst machen, wenn sich jetzt keine Lösung mit sscanf auftut.
 
Zuletzt bearbeitet:
scanf/sscanf: Die Formatangaben (die ganzen %-Sachen etc), um die es hier geht, sind bei scanf und sscanf (und fscanf und ...) komplett identisch.
Unterschiede gibt es nur, von wo eingelesen wird.
scanf: Tastatur
sscanf: String/char-Array
fscanf: Datei (als FILE*)
...
 

Neue Beiträge

Zurück