Ответ 1
Интересная ошибка! Вы забыли имя функции. Обратите внимание на внутреннее тело цикла после выражения:
tokens = (NULL, ",'");
^
'strtok' missing
должен быть:
tokens = strtok(NULL, ",'");
Интересно, что это не ошибка компиляции, на самом деле:
tokens = (NULL, ",'");
является допустимым выражением, которое равно:
tokens = ",'";
(Примечание: NULL
не имеет побочных эффектов)
Читайте: Comma Operator: ,
Оператор запятой
,
имеетleft-to-right associativity
. Два выражения разделенные запятой, оцениваются слева направо. Левый операнд всегда оценивается, и все побочные эффекты завершаются доright operand is evaluated
.
Из-за скобки (
)
при rhs =
после оценки ,
оператор правой руки ","
присваивается token
. И поскольку token
никогда не назначался NULL
, поэтому while(tokens != NULL)
никогда не прерывается, и именно по этой причине вы получаете ","
бесконечно!