有人可以向我解释以下代码段,特别是第三行,因为它似乎导致我的代码出错:
char * (strtok_r)(char *s, const char *delimiters, char **lasts) {
char *sbegin, *send;
sbegin = s ? s : *lasts;
...
我猜测它更像是我传递了一个不正确的指针值或者其他东西,但是因为我不确定该功能是如何做它所做的那样......
TA
编辑:我不确定发生的错误是因为g $£& mn f *£$%^%Visual Studio JIT调试器一直试图打开并乱搞一切。 GRR ..
答案 0 :(得分:5)
答案 1 :(得分:3)
该行:
sbegin = s ? s : *lasts;
与:
相同if(s)
sbegin = s;
else
sbegin = *lasts;
?:
被称为三元运算符。
答案 2 :(得分:2)
此部分代码称为ternary operation。
sbegin = s ? s : *lasts;
相当于
if(s != null) sbegin = s
else sbegin = *lasts;
答案 3 :(得分:1)
对我来说这很好,除了strtok_r
周围的括号有点多余和不寻常。
第三行使用三元运算符:它是表示条件的正确表达式。如果问号?
之前的部分评估为true(即0
以外的其他部分),则整个表达式将具有?
和:
之间的表达式值。否则它将在冒号:
之后的表达式。
由于sbegin
,s
和*lasts
的类型匹配,我认为没有问题。