作为程序的一部分,我将命令作为一系列标记进行处理。到目前为止我\xc2\xb4已经得到:
\n\nvoid exec_this(char* cmd) {\n char token[100] = {0};\n sscanf(cmd, "%s", token)\n if(0 == strcmp(token, "add")) {\n char arg1[100] = {0};\n sscanf(cmd, "%*s%s", arg1); \n // continue parsing more args...\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n“%*s”很难看,尤其是当有很多参数时。
\n\n查看http://www.cplusplus.com/reference/cstdio/scanf/,有一个可能的说明符“n”用于检索“到目前为止读取的字符”。不确定在这种情况下“读取”意味着什么,因为字符串中存在空格和内容,而不是检索到的字符串的一部分;“添加 foo 42”。这就是我希望它工作的方式,但不确定它是否正确:
\n\nvoid exec_this(char* cmd) {\n char token[100] = {0};\n int n;\n sscanf(cmd, "%s%n", token, &n);\n if(0 == strcmp(token, "add")) {\n char arg1[100] = {0};\n sscanf(&cmd[n], "%s%n", arg1, &n);\n // continue parsing more args...\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
到目前为止读取的字符数包括所有空格:
int a, b, c;
sscanf(" quick brown fox jumps", "%*s%n%*s%n%*s%n", &a, &b, &c);
printf("%d %d %d\n", a, b, c);
Run Code Online (Sandbox Code Playgroud)
上面的打印 10 17 27,让您获得缓冲区内每个扫描点的位置。
sscanf这非常适合您的用例,因为您可以在进入第二个时跳过第一个中处理的字符数sscanf。您可以使用&cmd[n]或等效项cmd+n来跳过初始n字符。
| 归档时间: |
|
| 查看次数: |
2433 次 |
| 最近记录: |