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);