sscanf不能正常工作?

时间:2015-02-13 20:14:58

标签: c scanf

我正在尝试解析一个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:

我不确定为什么将所有字符串放入协议变量中,而不是将正确的部分放入每个变量中。有什么想法吗?

2 个答案:

答案 0 :(得分:8)

sscanf贪婪。它尽可能多地读取字符。

将其更改为使用:

char* url = "https://google.com:8000/foobar";
sscanf(url, "%[^:]://%[^:]:%[^/]/%s", prot, host, port, path);

答案 1 :(得分:6)

sscanf() "%s"格式为贪婪,因此会尽可能匹配。

您还需要检查sscanf()的返回值。它返回一个。

请查阅手册页。也许格式"%[^:]"正是您所寻找的。