0

誰かが次のコード スニペットを説明してくれませんか。具体的には、コードでエラーを引き起こしているように見える 3 行目です。

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周りの括弧が少し冗長で珍しいことを除けば、私には問題ないように見えます。

3 行目では、三項演算子を使用しています。これは、条件を表す適切な式です。疑問符の前の部分?が真 (つまり 以外のもの0) と評価される場合、式全体は と の間の式の値に?なり:ます。それ以外の場合は、コロンの後の式になり:ます。

sbeginsとの型が*lasts一致するので、問題はないと思います。

于 2012-07-25T16:16:56.100 に答える