ich zur Zeit einen FTP-Server schreibe und ich brauche die IP und den Port von einem Remote-Server von einem Eingangs String-Puffer in folgendem Format zu analysieren:Linux sscanf Funktion füllt nicht variabel
xxx,xxx,xxx,xxx,yyy,zzz
wo:
xxx
steht für eine IP-Adresse in dezimaler Oktettyyy
ist rund ((Remote-Port-Nummer)/256)zzz
ist (Remote-Portnummer)% 256
Zum Beispiel: 127,0,0,1,123,64
bedeutet ip = 127.0.0.1
und port = 31552
.
ich derzeit sscanf
verwenden die folgenden Felder aus dem Eingabestring Puffer zu extrahieren:
sscanf(str, "%u,%u,%u,%u,%u,%u", ret_ip, &ip[0], &ip[1], &ip[2], &temp1, &temp2) == 6
wo:
- str ist der Eingangspuffer
- ret_ip ist vom Typ
uint32_t
- ip's sind vom Typ
uint32_t
- TEMP1 und TEMP2 sind vom Typ
unsigned short int
Beispielcode:
#include <stdio.h>
#include <netdb.h>
int main(int argc, char *argv[])
{
uint32_t ip[4];
unsigned short int temp, temp1;
if (sscanf("127,0,0,1,142,214", "%u,%u,%u,%u,%u,%u", &ip[0], &ip[1], &ip[2], &ip[3], &temp, &temp1) == 6)
{
printf("%u : %u", temp, temp1);
}
return (0);
}
Mein Problem ist, dass für gültige Zeichenfolge, wird der Wert von temp1 ist immer 0 (Null), dh alle anderen Variablen werden entsprechend der Zeichenkette mit Ausnahme der temp1 gefüllt. Ich würde jede Hilfe schätzen.
Danke für die Hilfe, die% hu Spezifizierer hat den Trick. – dotSK