sscanf 不能正常工作?
sscanf not working right?
我正在尝试解析一个 URL,并编写了这段代码:
#include <stdio.h>
int main() {
char host[100];
char port[100];
char path[100];
char prot[100];
char* url = "https://google.com:8000/foobar";
sscanf(url, "%s://%s:%s/%s", prot, host, port, path);
printf("Protocol: %s\n", prot);
printf("Host: %s\n", host);
printf("Port: %s\n", port);
printf("Path: %s\n", path);
return 0;
}
然而,它输出这个:
Protocol: https://google.com:8000/foobar
Host: å0&TFaa
Port:
Path:
我不确定为什么将我的所有字符串都放入协议变量中,而不是将正确的部分放入每个变量中。有什么想法吗?
带有"%s"
的sscanf()
格式是贪婪的,所以它会尽可能匹配。
您还需要检查 sscanf()
的 return 值它是 returning 一个。
请查看手册页。也许格式 "%[^:]"
就是您要查找的格式。
sscanf
是贪婪的。它会读取尽可能多的字符。
改为使用:
char* url = "https://google.com:8000/foobar";
sscanf(url, "%[^:]://%[^:]:%[^/]/%s", prot, host, port, path);
我正在尝试解析一个 URL,并编写了这段代码:
#include <stdio.h>
int main() {
char host[100];
char port[100];
char path[100];
char prot[100];
char* url = "https://google.com:8000/foobar";
sscanf(url, "%s://%s:%s/%s", prot, host, port, path);
printf("Protocol: %s\n", prot);
printf("Host: %s\n", host);
printf("Port: %s\n", port);
printf("Path: %s\n", path);
return 0;
}
然而,它输出这个:
Protocol: https://google.com:8000/foobar
Host: å0&TFaa
Port:
Path:
我不确定为什么将我的所有字符串都放入协议变量中,而不是将正确的部分放入每个变量中。有什么想法吗?
带有"%s"
的sscanf()
格式是贪婪的,所以它会尽可能匹配。
您还需要检查 sscanf()
的 return 值它是 returning 一个。
请查看手册页。也许格式 "%[^:]"
就是您要查找的格式。
sscanf
是贪婪的。它会读取尽可能多的字符。
改为使用:
char* url = "https://google.com:8000/foobar";
sscanf(url, "%[^:]://%[^:]:%[^/]/%s", prot, host, port, path);