我遇到了一个从给定字符串中提取令牌(c字符串)的代码,但我对第5行感到困惑:tok && *tok
。我只是无法弄清楚这个操作的结果。有人碰巧知道吗?
const char* getfield(char* line, int num)
{
const char* tok;
for (tok = strtok(line, ";");
tok && *tok;
tok = strtok(NULL, ";\n"))
{
if (!--num)
return tok;
}
return NULL;
}
谢谢!
答案 0 :(得分:5)
首先检查指针(tok
)是否不是nullptr
(指向无),如果指针不是nullptr
,它会检查指针是否指向内存其中值(*tok
)不是'\0'
。
答案 1 :(得分:3)
这是条件表达式,它检查tok
不是nullptr
而*tok
或字符不是“nul”字符'\0'
在C风格的for循环中,你有initalizer,condition和increment表达式。这里的条件是tok
计算结果为真,然后*tok
计算结果为真。
只有当tok
不是nullptr
且指向(*tok
)的字符不是'\0'
时,才会发生这种情况。
答案 2 :(得分:0)
&& amp;的含义保持原样。它仍然是一个逻辑运算符。该陈述相当于
(tok != nullptr) && (*tok != '\0');