Eine Scanset-Spezifikation ist nicht %s[whatever]
, sondern nur %[whatever]
. Ihre Format-Zeichenfolge sollte also eher wie folgt aussehen: "%d\nLen %d\nExpire %d\n\n%[^
. scanf
]"
Als eine Nebenbemerkung betrachten "%d Len %d Expire %d %[^
und freunde jedes Leerzeichen in einer Formatzeichenfolge als gleichwertig mit anderen Leerzeichen. Jedes Leerzeichen im Format entspricht einer beliebigen Folge von Leerzeichen in der Eingabe (und einer neuen Zeile) wird als Leerzeichen betrachtet). Ihre aktuelle Formatzeichenkette erledigt die Dokumentation des von Ihnen erwarteten Formats sehr gut, aber aus der Sicht dessen, was sie wirklich entspricht, können Sie sie wie folgt ändern: [
]"risorsa
]%c
, ohne zu beeinflussen, was sie tun soll. Vor allem deine zwei aufeinanderfolgenden Zeilen machen nicht wirklich viel.
Bearbeiten: Wenn Sie daran denken, verursacht "%d Len %d Expire %d %4999c"
nur ein kleines Problem: Das "\ 0" beendet die Zeichenfolge, sodass Sie eine ungültige Scan-Set-Spezifikation erhalten. Da Sie möchten, dass der Rest der Eingabe in %code% geht, ist es wahrscheinlich am einfachsten, %code% : %code% .
Und ja, dieses Mal habe ich es tatsächlich getestet:
%Vor%Ergebnis:
%Vor%Edit 2: Ich bin mir nicht sicher, auf welches Problem Sie hier stoßen. Ich habe es ein wenig modifiziert, um sowohl den führenden als auch den eingebetteten Leerraum zu lesen:
%Vor%... und hat so ziemlich das erwartete Ergebnis:
%Vor%Ich möchte auf einen Weg hinweisen, um das Problem in:
%Vor%Das Problem im Code ist, dass '\ 0' die Zeichenfolge vor der schließenden Klammer ']' beendet. Du könntest '\ 1' benutzen. Dann wird die Zeichenfolge nicht vorzeitig beendet und sscanf wird weiter scannen, bis keine Zeichenfolge mehr vorhanden ist.
Der korrigierte Code wäre:
%Vor%Vielleicht wollten Sie das überhaupt machen.