|
Выдать из функции указатель на ее статическую переменную |
|
|
|
 |
Ответов
|
Dec 5 2014, 11:33
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(ViKo @ Dec 5 2014, 14:31)  Вижу, вариантов много. Но не вижу лучшего.  Сделайте как в strtol - результат функции - само число. А указатель - на последний символ, на котором "запнулось" преобразование. По нему все сразу понятно. Если там isspace или ноль (конец строки), значит все ОК. Самая простая проверка - *endptr<=0x20 - под это попадает все сразу, все концы строк, ноль, пробел, табуляция.
|
|
|
|
|
Dec 5 2014, 12:11
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(SM @ Dec 5 2014, 14:33)  Сделайте как в strtol - результат функции - само число. А указатель - на последний символ, на котором "запнулось" преобразование. По нему все сразу понятно. Если там isspace или ноль (конец строки), значит все ОК. Самая простая проверка - *endptr<=0x20 - под это попадает все сразу, все концы строк, ноль, пробел, табуляция. Функция сложновата, мне столько не нужно. Или в строке десятичное число со знаком или без, или "галимотня". Указатель, ползущий по строке - сохраняется в глобальной переменной, для других парсерных функций. На этом числе еще не конец.
|
|
|
|
|
Dec 5 2014, 12:18
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(ViKo @ Dec 5 2014, 15:11)  Функция сложновата, мне столько не нужно. Или в строке десятичное число со знаком или без, или "галимотня". Указатель, ползущий по строке - сохраняется в глобальной переменной, для других парсерных функций. На этом числе еще не конец. Так тогда strtol вам и нужна в чистом ее виде. Зачем глобальная переменная с ползущим указателем, когда она при использовании strtol становится локальная - strtol ее и возвращает, именно, чтобы распознать галиматью, конец строки, или продолжить со следующим числом, все зайцы убиты одним выстрелом и без глобальных переменных. В strtol передаем указатель на текущее положение в строке, и передаем в качестве указателя на конец указатель на этот же указатель  - в результате он один и "ползет по строке". Или, сделайте так: int my_strtol(char **pPtr); То есть сразу передаете в функцию указатель на указатель, который передвигается по строке. По тому, на чем он остановился после вызова функции, распознаете, что там. Это эквивалентно вызову strtol(ptr, *ptr, 10).
|
|
|
|
|
Dec 5 2014, 12:33
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(SM @ Dec 5 2014, 15:18)  Так тогда strtol вам и нужна в чистом ее виде... У этой функции 3 параметра. Указатель, ползущий по строке, у меня в глобальной структуре имеется, его передавать не нужно. Если попалась строка "-300голов", то мне логично промотать его до space-символов, а не остановиться на "г". Не буду нарушать созданную логику, сделаю, как хотел. Правильно, указатель на локальную статическую переменную выдавать и использовать снаружи функции можно?
|
|
|
|
Сообщений в этой теме
ViKo Выдать из функции указатель на ее статическую переменную Dec 5 2014, 10:26 Mc_off При вызове функции передавайте туда указатель на в... Dec 5 2014, 10:35 ViKo Если переменная внутри функции не статическая, то ... Dec 5 2014, 10:39 adnega Цитата(ViKo @ Dec 5 2014, 14:39) Если пер... Dec 5 2014, 10:48 _pv да можно конечно, только вот зачем?
использовать ... Dec 5 2014, 10:45 ViKo Цитата(_pv @ Dec 5 2014, 13:45) да можно ... Dec 5 2014, 10:54  SM Цитата(ViKo @ Dec 5 2014, 13:54) А что мн... Dec 5 2014, 11:09 AlexandrY Цитата(ViKo @ Dec 5 2014, 12:26) В функци... Dec 5 2014, 11:19 CrimsonPig Цитата(ViKo @ Dec 5 2014, 10:26) В функци... Dec 5 2014, 11:20    AlexandrY Цитата(SM @ Dec 5 2014, 14:18) Так тогда ... Dec 5 2014, 12:30     SM Цитата(AlexandrY @ Dec 5 2014, 15:30) str... Dec 5 2014, 12:34     ViKo Цитата(AlexandrY @ Dec 5 2014, 15:30) Но ... Dec 5 2014, 12:34     SM Цитата(ViKo @ Dec 5 2014, 15:33) Правильн... Dec 5 2014, 12:38      ViKo Цитата(SM @ Dec 5 2014, 15:38) Теоретичес... Dec 5 2014, 12:40       SM Цитата(ViKo @ Dec 5 2014, 15:40) Ок! ... Dec 5 2014, 12:42        ViKo Цитата(SM @ Dec 5 2014, 15:42) Только не ... Dec 5 2014, 12:46         SM Цитата(ViKo @ Dec 5 2014, 15:46) Разбор с... Dec 5 2014, 12:48        ViKo Кстати, как это слово правильно использовать, пере... Dec 5 2014, 12:51         SM Цитата(ViKo @ Dec 5 2014, 15:51) Кстати, ... Dec 5 2014, 13:19          ViKo Цитата(SM @ Dec 5 2014, 16:19) Поток, это... Dec 5 2014, 13:23 CrimsonPig Цитата(ViKo @ Dec 5 2014, 11:31) Вижу, ва... Dec 5 2014, 11:38 dxp Возвращать результат из функции, храня его во внут... Dec 5 2014, 15:23 ViKo Я же указатель возвращаю, не сам объект. И указате... Dec 5 2014, 15:25 Сергей Борщ Цитата(ViKo @ Dec 5 2014, 17:25) Работает... Dec 5 2014, 18:25  ViKo Цитата(Сергей Борщ @ Dec 5 2014, 21:25) В... Dec 6 2014, 12:24 Slash Указатель на переменную успеха/неудачи передавать ... Dec 5 2014, 19:16 _Pasha bool или нет, но
Кодunsigned char str2int32(in... Dec 6 2014, 16:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|