%64[^ спецификатор в C

sscanf(line, "%d %64[^\n", &seconds, message);

тут %64[^ mean-до 64 символов? Должен ли он работать с компилятором GNU C?

1 ответов


это означает "прочитайте не более 64 символов или остановитесь при достижении новой строки, в зависимости от того, что наступит раньше". Он указан стандартом, поэтому все стандартные библиотеки должны его поддерживать.

C11 7.21.6.2

[ соответствует непустой последовательности символов из набора ожидаемых символов (набора). [...] Указатель включает в себя все последующие символы в формат строки, вплоть до соответствия кронштейн правый (]).

символы между скобками (scanlist) составляют набор, если персонаж после левой квадратной скобки стоит символ'^' (^), в этом случае набор содержит все символы, которые не появляются в список между circumflex и правой скобкой.

как отмечено в комментариях, соответствие ] вероятно, требуется для разграничения scanlist. An s описатель не требуется.