【问题标题】:Read variable arguments from string in C从C中的字符串读取变量参数
【发布时间】:2014-02-12 18:23:31
【问题描述】:

我一直在寻找这个问题的答案……但我没有找到。

我得顺便用C解析一个字符串

1 2 3

的速率将 XMb 发送到 eth0 eth1 wlan0

2 5

的费率将 YMb 发送到 em1 wlan0

问题是我不知道我将在列表中包含多少元素..因此我不知道要放置多少 %s。

提前致谢。

【问题讨论】:

  • 如果是字符串,只需根据分隔符(在本例中为空格)对字符串进行标记。

标签: c parsing scanf


【解决方案1】:

一种可能的解决方案是读入整个命令并稍后处理它。 例如,您可以使用分隔符 ' '(一个空格)标记您的命令字符串。然后查找“to”和“with”之间的所有标记,这将是您的发送目的地。同样,您可以通过在“rates”后面查找标记来找到费率。

【讨论】:

    【解决方案2】:

    另一种可能性是使用sscanf(或fscanf)解析字符串,并使用%n 说明符,它存储到该点处理的字符数。

    #include <stdio.h>
    #include <string.h>
    
    int main() {
    
      char str[] = "Send XMb to eth0 eth1 wlan0 with rates 1 2 3";
      char val[100];
      char c[2];
      int n = 0, m;
    
      if (sscanf(str, "Send %1[XY]Mb to %n", c, &n) == 1) {
    
        printf("%s\n", c);
    
        while (sscanf(str+n, "%99s%n", val, &m) == 1) {
            n += m;
            if (strcmp(val, "with") == 0)
                break;
            printf("%s\n", val);
        }
    
        sscanf(str+n, " rates%n", &m);
        n += m;
    
        while (sscanf(str+n, "%99s%n", val, &m) == 1) {
            printf("%s\n", val);
            n += m;
        }
      }
    
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 2011-04-15
      • 2014-02-26
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多