我正在尝试解析一个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:
我不确定为什么将所有字符串放入协议变量中,而不是将正确的部分放入每个变量中。有什么想法吗?
答案 0 :(得分:8)
sscanf
贪婪。它尽可能多地读取字符。
将其更改为使用:
char* url = "https://google.com:8000/foobar";
sscanf(url, "%[^:]://%[^:]:%[^/]/%s", prot, host, port, path);
答案 1 :(得分:6)
sscanf()
"%s"
格式为贪婪,因此会尽可能匹配。
您还需要检查sscanf()
的返回值。它返回一个。
请查阅手册页。也许格式"%[^:]"
正是您所寻找的。 p>