Перейти к содержанию
    

On 11/23/2022 at 3:38 PM, jcxz said:

Если после вызова (*endptr != str) && (*endptr указывает на допустимый сивмол границы числа) -> значит разбор был корректный.

но если я допускаю только цифровую строку - тогда мне нужно только это условие - *endptr == '\0'.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/23/2022 at 3:39 PM, engel65536 said:

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

ну это существенно упрощает парсинг 🙂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, jenya7 сказал:

но если я допускаю только цифровую строку - тогда мне нужно только это условие - *endptr == '\0'.

Если использовать strtol()/strtoul() для разбора сложных строк типа: "NNN, MMM. KKK; ..." где NNN, MMM, KKK - числа; то можно разбирать такую строку сразу, на лету, не деля её на подстроки. Не нужно отдельных буферов и лишних телодвижений с копированиями. И при разборе анализировать стоповый символ (вызвавший останов разбора числа).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/23/2022 at 3:46 PM, jcxz said:

Если использовать strtol()/strtoul() для разбора сложных строк типа: "NNN, MMM. KKK; ..." где NNN, MMM, KKK - числа; то можно разбирать такую строку сразу, на лету, не деля её на подстроки. Не нужно отдельных буферов и лишних телодвижений с копированиями. И при разборе анализировать стоповый символ (вызвавший останов разбора числа).

👍. то что нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, jenya7 сказал:

а физически где строка находиться? понятно в RAM но по какому принципу ф-ция выделяет место?

Функция никакого места этой строке не выделяет. Она получает уже указатель на строку. А компилятор обычно размещает такую const-строку в const-памяти (если МК - обычно это flash) Где у вас - не знаю, загляните в .map.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 23.11.2022 в 19:24, jenya7 сказал:

а условие успеха будет (endptr != NULL) ?

Вот хорошая статья про то, как правильно проверять корректность перевода строки в число функцией strtol. В конце приведён код, как корректно проверить успех этой операции.  http://knzsoft.blogspot.com/2015/04/strtol-strtoll.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...