sscanf & newlines

8

Ich muss eine Antwort von einem Server wie folgt analysieren:

risposta:

%Vor%

Ich versuche mit sscanf:

%Vor%

aber es setzt nur 111111111111111111111111111 in risp- & gt; risorsa. Wie löst man?

P. s. struct risp:

%Vor%     
Davide 07.04.2012, 14:05
quelle

3 Antworten

7

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 %[^[risorsa]]" 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: %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% .

zu verwenden

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%     
Jerry Coffin 07.04.2012, 14:19
quelle
0

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.

    
Indinfer 29.01.2015 00:57
quelle
-1

Es gibt einige Probleme mit dem folgenden Code:

%Vor%

Es sollte sein:

%Vor%

Sie sollten die Zeichenfolge "Len" und "Expire" behandeln, und sscanf kann damit nicht umgehen.

    
yaronli 07.04.2012 14:12
quelle

Tags und Links