0

有人可以向我解释以下代码片段,特别是第三行,因为它似乎导致我的代码出错:

char * (strtok_r)(char *s, const char *delimiters, char **lasts) {
    char *sbegin, *send;
    sbegin = s ? s : *lasts;
    ...

我猜它更像是我传递了一个不正确的指针值或其他东西,但无法弄清楚,因为我不确定该函数到底是如何做的......

编辑:我不确定发生的错误,因为 g$£&mn f*£$%^% Visual Studio JIT 调试器一直试图打开并搞砸一切。呸呸呸。。

4

4 回答 4

5

相当于

if (s)
    sbegin = s;
else
    sbegin = *lasts;

要获取有关操作员的更多详细信息?:,您可以阅读内容。

于 2012-07-25T16:11:15.553 回答
3

该行:

sbegin = s ? s : *lasts;

是相同的:

if(s) 
    sbegin = s; 
else 
    sbegin = *lasts;

?:称为三元运算符。

于 2012-07-25T16:11:42.310 回答
2

这部分代码称为三元运算

sbegin = s ? s : *lasts;

相当于

if(s != null) sbegin = s
else sbegin = *lasts;
于 2012-07-25T16:13:54.417 回答
1

对我来说看起来不错,只是周围的括号strtok_r有点多余和不寻常。

第三行使用三元运算符:它是表示条件的正确表达式。如果问号之前的部分?计算结果为真(即不是0),则整个表达式将具有介于?and之间的表达式的值:。否则它将在冒号之后的表达式:

由于sbegin,s*lasts匹配的类型,我认为那里没有问题。

于 2012-07-25T16:16:56.100 回答