Запутанный язык в спецификации strtol и др.

Спецификация для strtol концептуально делит входную строку на «начальный пробел», «предметную последовательность» и «конечную строку. ", и определяет" субъектную последовательность "как:

самая длинная начальная подпоследовательность входной строки, начиная с первого непробельного символа, имеющего ожидаемую форму. Субъектная последовательность не должна содержать символов, если входная строка пуста или полностью состоит из символов пробела, или если первый символ, не являющийся пробелом, не является знаком, допустимой буквой или цифрой.

Одновременно Я думал, что бизнес «самой длинной начальной подпоследовательности» был сродни тому, как работает scanf , где «0x @» будет сканировать как «0x» , совпадение не выполнено. , за которым следует «@» в качестве следующего непрочитанного символа. Однако после некоторого обсужденияЯ в основном убежден, что strtol обрабатывает самую длинную начальную подпоследовательность ожидаемой формы, а не самую длинную начальную строку, которая является начальной подпоследовательностью некоторой возможной строки ожидаемой формы.

Что все еще сбивает с толку. me - это следующий язык в спецификации:

Если субъектная последовательность пуста или не имеет ожидаемой формы, преобразование не выполняется; значение str хранится в объекте, на который указывает endptr, при условии, что endptr не является нулевым указателем.

Если мы принимаем то, что кажется правильным определением «субъектной последовательности», не существует такой вещи, как ненулевой указатель. -пустая тематическая последовательность, которая не имеет ожидаемой формы, и вместо этого (чтобы избежать избыточности и путаницы) текст должен просто читать:

Если субъектная последовательность пуста, преобразование не выполняется; значение str сохраняется в объекте, на который указывает endptr, при условии, что endptr не является нулевым указателем.

Может ли кто-нибудь прояснить мне эти проблемы? Возможно, будет полезна ссылка на прошлые обсуждения или любые соответствующие отчеты о дефектах.

6
задан R.. 14 July 2011 в 23:17
поделиться