Работа с массивом char
- Войдите на сайт для отправки комментариев
Чт, 16/11/2017 - 11:20
Всем привет!
Нужна помощь. Есть массив char, который имеет вид:
данные\r\n\r\n,{данные}\r\n\r\n
Меня интересует только то ,{данные}
Я нахожу последовательность \r\n\r\n,{ и начиная с ,{ сохраняю указатель в temp
char * temp = strstr((char*)inPack, "\r\n\r\n,{") + 4;
А как сейчас сохранить все до вторых \r\n\r\n?
А как сейчас сохранить все до вторых \r\n\r\n?
Что значит "сохранить"? Сделать копию этого куска? Или достаточно сохранить указатели или позиции начала и конца?
Вообще, если свободная память позволяет, категорически рекомендую использовать для всех работ со строками String, позволяет избежать огромного количества проблем.
Число вариантов решения тут более одного. Если после ,{данные} ничего не нужно более, то ищете, начиная с temp, указатель на } или }\r\n\r\n и пишете в эту позицию '\0'. В итоге у вас по адресу temp будет расположена NUL-терминированная строка.
Число вариантов решения тут более одного. Если после ,{данные} ничего не нужно более, то ищете, начиная с temp, указатель на } или }\r\n\r\n и пишете в эту позицию '\0'. В итоге у вас по адресу temp будет расположена NUL-терминированная строка.
String не могу использовать, потому что много памяти занимает, поэтому перевожу все на char
Да, после } ничего не нужно. Покажите что дальше нужно делать?
Суть такая, что я в каждой итерации цикла получаю данные\r\n\r\n,{данные}\r\n\r\n и мне нужно их в итоге сложить в 1 большую строку (получить синтаксис json)
То же самое, что и делали с inPack, но в temp. '\0' по указателю, думаю, вам нужно самостоятельно научиться записывать, а то никуда вы от String не убежите.
Я как вариант думаю использовать символы STX и ETX, буду пробовать, спасибо
Суть такая, что я в каждой итерации цикла получаю данные\r\n\r\n,{данные}\r\n\r\n и мне нужно их в итоге сложить в 1 большую строку (получить синтаксис json)
В таком случае лучше сделать так, чтобы в строке оставалось {данные} (со скобочками). Указателям -1 и +1 сделаете и потом strcpy() в свою большую строку.
На следующей итерации оптимизации, когда поймете, как работает этот, будете искать указатель на начало искомой строки и на конец, потом memcpy() с разницей между "конечным" указателем и "начальным".
Я так подумал, строка будет проще тогда
Я понятия не имею, как проще, так как вы правила игры меняете на ходу.
Вроде так заработало
Зачем так много вычислений и два способа сразу для решения одной задачи? ETX нашли - на его место '\0' воткнули. Строка готова для strcpy(). А если уж вычислили body_len, то для понятности и мизерного снижения оверхеда делайте memcpy()(ну, я бы так сделал). И осторожней с malloc, тут не ПК - некому будет оптимизировать ваши дырки в памяти.
Число вариантов решения тут более одного.
Я бы сказал, "более, чем 100500"
ТС,
Вам вот сюда и читать описания всех функций, начинающихся с str до полного просветвления. Заодно, много чего общеполезного узнаете и серьёзно прокачаете свои умения.
Ну да. Ровно один в один задача была на ГИА. Т.е., даже не на ЕГЭ. В зависимости от школы решалась на паскале, С, питоне.
Вам вот сюда и читать описания всех функций, начинающихся с str до полного просветвления. Заодно, много чего общеполезного узнаете и серьёзно прокачаете свои умения.
Вот злой ты чоловик, нет что-нибудь наше, православное, на кириллице. Знай пихает богомерзкое, протестантско-католическое, на непатриотичном инглише.))))
нет что-нибудь наше, православное, на кириллице. Знай пихает богомерзкое, протестантско-католическое, на непатриотичном инглише.))))
Ну, нет! Не надо переводить стрелки! ТС спросил про богомерзкий вражеский атмел, вот и пришлось ему атмеловскую документацию давать. Нет чтобы ТС на родном МК60 или там Эльбрусе свои поделки ваять - тогда б я ему православную документацию дал. А в этом пятоколонном атмеле, даже на богомерзком С++ программировать приходится (см. о богомерзкости и неправославности С++).
Всем привет!
Нужна помощь. Есть массив char, который имеет вид:
Меня интересует только то ,{данные}
Я нахожу последовательность \r\n\r\n,{ и начиная с ,{ сохраняю указатель в temp
А как сейчас сохранить все до вторых \r\n\r\n?