Omk*_*xit 2 c embedded design-patterns embedded-linux
我使用的代码如下所示
if (strcmp(oid, ".1.3.6.1.4.1.53864.1.1.0") == 0)
{
return 1;
}
else if (strcmp(oid, ".1.3.6.1.4.1.53864.1.2.0") == 0)
{
return 2;
}
...
else if (strcmp(oid, ".1.3.6.1.4.1.53864.1.n.0") == 0)
{
return n;
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是更新n值是250。任何人都可以给我任何想法来减少这个else if声明吗?
我尝试在 StackOverflow 上搜索,但这些答案与其他语言相关,我想要一个可以用 C 语言实现的想法。
这应该可以解决问题。请注意,它并不完全等效。它会跳过检查结尾“.0”,但如果您需要的话,添加它很简单。我还省略了 的错误检查sscanf,但这也很容易添加。
char prefix[] = ".1.3.6.1.4.1.53864.1.";
if(memcmp(prefix, oid, sizeof prefix-1) == 0) {
int n;
sscanf(&oid[sizeof prefix-1], "%d", &n);
return n;
}
Run Code Online (Sandbox Code Playgroud)
如果您非常确定字符串的格式正确,则可以memcmp完全跳过。根据您的要求,另一种方法是:
sscanf(".%*d.%*d.%*d.%*d.%*d.%*d.%*d.%*d.%d.%*d", %n);
Run Code Online (Sandbox Code Playgroud)
请注意,除了一个整数之外,我对所有整数都使用 %*d 。这意味着我正在阅读它们但不存储它们。