作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
作为程序的一部分,我将命令处理为一系列标记。到目前为止我有:
void exec_this(char* cmd) {
char token[100] = {0};
sscanf(cmd, "%s", token)
if(0 == strcmp(token, "add")) {
char arg1[100] = {0};
sscanf(cmd, "%*s%s", arg1);
// continue parsing more args...
}
}
“%*s”很难看,尤其是当有很多参数时。
查看http://www.cplusplus.com/reference/cstdio/scanf/有一个可能的说明符“n”用于检索“到目前为止读取的字符”。不确定在这种情况下“读取”是什么意思,因为字符串中有空格和其他内容,而不是检索到的字符串的一部分; “添加 foo 42”。这就是我希望它工作的方式,但不确定它是否正确:
void exec_this(char* cmd) {
char token[100] = {0};
int n;
sscanf(cmd, "%s%n", token, &n);
if(0 == strcmp(token, "add")) {
char arg1[100] = {0};
sscanf(&cmd[n], "%s%n", arg1, &n);
// continue parsing more args...
}
}
最佳答案
到目前为止读取的字符数包括所有空格:
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);
以上prints 10 17 27
,让您在每个扫描点获得缓冲区内的位置。
这非常适合您的用例,因为您可以在进入第二个 sscanf
时跳过第一个 sscanf
中处理的字符数。您可以使用 &cmd[n]
或等效的 cmd+n
来跳过最初的 n
个字符。
关于c - scanf 说明符 "n"算什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46989068/
我正在测试自己编写的元素生成器 ( ICollection ),并将计算出的计数与实际计数进行比较,以了解我的算法是否存在错误。 由于此生成器可以按需生成大量元素,因此我正在寻找 Partitione
作为程序的一部分,我将命令处理为一系列标记。到目前为止我有: void exec_this(char* cmd) { char token[100] = {0}; sscanf(cmd, "%
我是一名优秀的程序员,十分优秀!