作爲程序的一部分,我將命令處理爲一系列令牌。到目前爲止,從來就得到了:scanf說明符「n」是什麼數字?
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」爲retrieveing「字讀爲止」。不確定在這種情況下「讀」是什麼意思,因爲字符串中有空格和東西,而不是檢索字符串的一部分; 「添加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...
}
}
你需要從'sscanf'檢查返回值,這樣你就知道了'N'值是否有效。它不算作轉換,因此請確保在'%n'之前有一個分配轉換規範(或者只有一個空白空間) - 所以你不能有一個不可檢測的匹配失敗。 –
@JonathanLeffler是的你是對的。我故意忽略錯誤處理,以保持示例簡單。 – Andreas