如何在c中标记全行输入?

| 我需要从cmd解析一条看起来像这样的行
\"SOME WHITE SPACE\" \"var_name\" \"SOME WHITE SPACE\" \"var_value\" \"SOME WHITE SPACE\"
我把整个行与fgets:
fgets(input_buf,MAX_LINE_LENGTH,stdin);
并尝试像这样标记化:
sscanf(input_buf,\"%s\", var_buff);

sscanf(input_buf+strlen(var_buff),\"%s\", var_val_buff);

sscanf(input_buf+(strlen(var_buff)+strlen(var_val_buff)+2),\"%s\", rest_line_buff);

if (strlen(rest_line_buff) == 0)

    printf(\"error in usage\\n\");
我没有正确的值,因为空格的数量可能会有所不同。如何标记输入行?     
已邀请:
scanf系列中的所有函数默认都会聚合并跳过多个空格字符:
sscanf(input_buf,\" %s %s\", var_buff, var_val_buf);
我不确定格式字符串中的前导空格是否绝对必要,但是如果输入行的开头没有实际的空格,我肯定这是正确的事件。     
使用
strtok
,如下面的示例程序所示:
#include <stdio.h>
#include <string.h>

int main ()
{
  char sampleInput[] =\"foo bar foo1 bar1 foo2 bar2\";
  char *token;
  char *whiteSpace = \" \\t\\n\\f\\r\\v\";
  int isVariable = 1;

  token = strtok(sampleInput, whiteSpace);
  while (token != NULL)
  {
     if (isVariable) 
        printf(\"Variable = %s\\n\", token);
     else 
        printf(\"Value = %s\\n\\n\", token);
     isVariable = isVariable ? 0 : 1;
     token = strtok(NULL, whiteSpace);
  }
  return 0;
}
输出:
Variable = foo
Value = bar

Variable = foo1
Value = bar1

Variable = foo2
Value = bar2
    
使用扫描仪生成器:http://en.wikipedia.org/wiki/Lexical_analysis#Lexer_generator或下载令牌生成器库。     
在这里使用
strtok( )
strtok_r( )
似乎很自然。你为什么反对呢?     

要回复问题请先登录注册