decrypted
次のように配列に格納された文字列があります。
char decrypted[5000];
sprintf(decrypted,"%s","192.168.0.2<==>6060<==>this is ipsec data");
そして、次のようにsscanfを使用してこれを読み取ろうとしています:
char ip_source[20];
int port_source;
char message[1000];
sscanf(decrypted,"%s<==>%d<==>%s",ip_source,&port_source,message);
printf("source = %s\nport = %d\nmessage = %s\n",ip_source,port_source,message);
しかし、次の出力が得られるため、これは機能していないようです。
source = 192.168.0.2<==>6060<==>this
port = 0
message =
私は何を間違っていますか?どうすれば修正できますか?
編集:
以下の提案に従って、コードを変更した方法を次に示します。これが新しい出力です。
char decrypted[5000];
sprintf(decrypted,"%s","192.168.0.2<==>6060<==>this is ipsec data");
char ip_source[20];
int port_source;
char message[1000];
sscanf(decrypted,"%[^<]<==>%d<==>%s",ip_source,&port_source,message);
printf("source = %s\nport = %d\nmessage = %s\n",ip_source,port_source,message);
出力:
source = 192.168.0.2
port = 6060
message = this
メッセージを完全な文字列として読み取らせ、最初のスペースで止まらないようにするにはどうすればよいですか?
編集2:
善良な皆さん、もう少しだけお楽しみいただけますか?
ここに私が読もうとしている別の文字列があります:
sprintf(decrypted,"%s","S=192.168.0.2|D=192.168.0.4||<==>S=6060");
sscanf(decrypted,"S=%s|D=%s||<==>S=%d",&ip_source,&ip_dest,&port_source);
再び問題を引き起こしています。次のように解決策を修正しようとしました。
sscanf(decrypted,"S=%[^<]<==>|D=%s||<==>S=%d",&ip_source,&ip_dest,&port_source);
しかし、それはうまくいきませんでした。それを修正するために上記を変更するにはどうすればよいですか?