在C中解析字符串最简单的方法是什么?

Luc*_*eis 2 c parsing

我必须在C中解析这个字符串:

XFR 3 NS 207.46.106.118:1863 0 207.46.104.20:1863\r\n
Run Code Online (Sandbox Code Playgroud)

并且能够获得207.46.106.118部分和1863部分(第一个IP地址).

我知道我可以通过char查找char并最终通过它查找,但是获取此信息的最简单方法是什么,因为字符串中的IP地址可能会更改为不同的格式(数字更少)?

Chr*_*oph 11

您可以使用sscanf()C标准库.这是一个如何将ip和port作为字符串的示例,假设地址前面的部分是常量:

#include <stdio.h>

int main(void)
{
    const char *input = "XFR 3 NS 207.46.106.118:1863 0 207.46.104.20:1863\r\n";

    const char *format = "XFR 3 NS %15[0-9.]:%5[0-9]";
    char ip[16] = { 0 };  // ip4 addresses have max len 15
    char port[6] = { 0 }; // port numbers are 16bit, ie 5 digits max

    if(sscanf(input, format, ip, port) != 2)
        puts("parsing failed");
    else printf("ip = %s\nport = %s\n", ip, port);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

格式串的重要部分是扫描集模式%15[0-9.]%5[0-9],这将匹配的数字或点(即IP地址将不会为良好性检查)由至多15个字符的字符串和至多5个数字的串分别(这意味着超过2 ^ 16-1的无效端口号将会漏掉).