gpt4 book ai didi

c - scanf 说明符 "n"算什么?

转载 作者:太空狗 更新时间:2023-10-29 15:34:32 25 4
gpt4 key购买 nike

作为程序的一部分,我将命令处理为一系列标记。到目前为止我有:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com