我有一个字符串存储在一个数组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(解密,"S=%[^<]<==>|D=%s||<==>S=%d",&ip_source,&ip_dest,&port_source);
但这没有用。如何在上面进行更改以修复它?