реклама на сайте
подробности

 
 
> Выдать из функции указатель на ее статическую переменную
ViKo
сообщение Dec 5 2014, 10:26
Сообщение #1


Универсальный солдатик
******

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



В функции преобразую строку в число, и хочу выдать указатель на это число, если оно получилось из строки, и NULL, если в строке галимотня.
Можно определить глобальную int32_t переменную, в которую преобразовывать строку, и выдавать указатель на нее. Не нравится, что переменная глобальная.
Могу ли создать статическую переменную внутри функции, и выдавать указатель на нее?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Dec 5 2014, 11:31
Сообщение #2


Универсальный солдатик
******

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



Вижу, вариантов много. Но не вижу лучшего. rolleyes.gif
Go to the top of the page
 
+Quote Post
SM
сообщение Dec 5 2014, 11:33
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Dec 5 2014, 14:31) *
Вижу, вариантов много. Но не вижу лучшего. rolleyes.gif


Сделайте как в strtol - результат функции - само число. А указатель - на последний символ, на котором "запнулось" преобразование. По нему все сразу понятно. Если там isspace или ноль (конец строки), значит все ОК. Самая простая проверка - *endptr<=0x20 - под это попадает все сразу, все концы строк, ноль, пробел, табуляция.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 5 2014, 12:11
Сообщение #4


Универсальный солдатик
******

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



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

Функция сложновата, мне столько не нужно. Или в строке десятичное число со знаком или без, или "галимотня".
Указатель, ползущий по строке - сохраняется в глобальной переменной, для других парсерных функций. На этом числе еще не конец.
Go to the top of the page
 
+Quote Post
SM
сообщение Dec 5 2014, 12:18
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Dec 5 2014, 15:11) *
Функция сложновата, мне столько не нужно. Или в строке десятичное число со знаком или без, или "галимотня".
Указатель, ползущий по строке - сохраняется в глобальной переменной, для других парсерных функций. На этом числе еще не конец.


Так тогда strtol вам и нужна в чистом ее виде. Зачем глобальная переменная с ползущим указателем, когда она при использовании strtol становится локальная - strtol ее и возвращает, именно, чтобы распознать галиматью, конец строки, или продолжить со следующим числом, все зайцы убиты одним выстрелом и без глобальных переменных. В strtol передаем указатель на текущее положение в строке, и передаем в качестве указателя на конец указатель на этот же указатель sm.gif sm.gif sm.gif - в результате он один и "ползет по строке".

Или, сделайте так:

int my_strtol(char **pPtr);

То есть сразу передаете в функцию указатель на указатель, который передвигается по строке. По тому, на чем он остановился после вызова функции, распознаете, что там. Это эквивалентно вызову strtol(ptr, *ptr, 10).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 5 2014, 12:33
Сообщение #6


Универсальный солдатик
******

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



Цитата(SM @ Dec 5 2014, 15:18) *
Так тогда strtol вам и нужна в чистом ее виде...

У этой функции 3 параметра.
Указатель, ползущий по строке, у меня в глобальной структуре имеется, его передавать не нужно.
Если попалась строка "-300голов", то мне логично промотать его до space-символов, а не остановиться на "г".
Не буду нарушать созданную логику, сделаю, как хотел.
Правильно, указатель на локальную статическую переменную выдавать и использовать снаружи функции можно?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 11:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01455 секунд с 7
ELECTRONIX ©2004-2016