在C中使用sscanf()获得可变数量的子字符串

时间:2019-05-21 15:46:36

标签: c regex string scanf

因此,我正在用C编写用于汇编语言的解析器。 我有可以采用以下任何一种形式的宏:

# label
# dat variable_name, 3

如何使用单个sscanf(或其他方法)将表达式拆分为各个组成部分。

例如标识符(用于标签和dat),变量(用于变量名称)和值(用于值)

1 个答案:

答案 0 :(得分:1)

  

如何使用单个sscanf(或其他方法)将表达式拆分为各个组成部分。

使用"%n"记录扫描进度。

char label_dat[10 + 1];
char var_name[20 + 1];
int var_val; 
int n1 = 0;
int n2 = 0;
//               v-------v----v---- Tolerate trailing whitespace                  
sscanf(s, "# %10s %n %20s , %d %n", label_dat, &n1, var_name, &var_val, &n2);

// If scanning made it to `n1` and there was no more text
if (n1 && s[n1] == '\0') {
  printf("Label '%s'\n", label_dat);
// If scanning made it to `n2` and there was no more text
} else if (n2 && s[n2] == '\0') {
  printf("Data '%s', Name '%s', Value %d\n", label_dat, var_name, var_val);
} else {
  puts("Bad input");
}

如果在#,之后需要空格,则需要更多代码。