Да и плюс тоже
Slava
Наверно да
А если юзб подать и убрать?
Slava
От юсп все ок
Я не уверен что эта колодка куда ты впаял для батарейки
Это скорей для внешнего источника. Прозвони
Slava
щас паяльник прогрею
Serjio
тока чёт память он не увеличил под первую строку. СТрано. Туда номер не влезет же
не зря его запрещать стали, а то насоветует всякого, а морду бить некому..
Гоша
не зря его запрещать стали, а то насоветует всякого, а морду бить некому..
самое интересное, было несколько новостей что чатгпт прошёл собеседование в какие-то IT компании
Andrey
самое интересное, было несколько новостей что чатгпт прошёл собеседование в какие-то IT компании
Чего ему интеллектом не продавить ХРюш, которые собеседуют соискателей. Да он их и без интеллекта продавит, там алгоритмы примитивные в ХР.
Slava
Наверно на той плате просто разьем питания, на плате с аккумулятором совсем другая схема
Наверно на той плате просто разьем питания, на плате с аккумулятором совсем другая схема
Ты фотографию совсем другой платы показал вначале. Там видно микросхему заряда рядом с разьемом, а сам включил вообще другую и еще припаялся куда то не туда 🤡
Slava
Да, платы разные, вторая с настоящим аккумом
Slava
Гоша
Да. Поиск конца строки для добавления. Как я понимаю.
там задача была заменить подстроку PHONE на другую строку. Поэтму поиск всё равно нужен. Нужно определить положение PHONE в исходной строке.
Гоша
а дальше как заменять - strcpy или strcat - я не вижу тут разницы, шо то пойдёт, шо другое
Serjio
а если не найдет - как быть?
Гоша
а если не найдет - как быть?
там условие стоит. Если strstr вернёт NULL - значит не нашли. Значит и менять ничо не надо
Serjio
по итогу что? чатгпт молодец?
Slava
по итогу что? чатгпт молодец?
Инт майн ретурн ноль. Ну конечно молодец.
Slava
И вообще, я не понял что хотел автор, но вроде есть простая команда replace.
Slava
В Ардуино иде точно есть. В моем говнокоде я её 500 раз использую
Гоша
нашёл такое
Гоша
https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/replace/
Гоша
но у человека были прост сишные строки
Slava
Может он просто не знает, что можно сделать стринг и реплайс?
Slava
Или он просто не ищет легких путей
Гоша
Может...
Может он просто не знает, что можно сделать стринг и реплайс?
🤡 Не все пишут на ардуине. И не везде эту хуйню пихать уместно.
reza
Hi , hope you are doing well. I need some help about programing so I decided to ask my question here. char phone[16] = "9371231234"; char text[128] = "My number is PHONE"; How could I replace <PHONE> in text array?
First of all, thank you all people who tried to help me❤️ I found what I need. Here is the code, I know it's not simple to understand how does it work. But it works great.
reza
void str_replace(char *src, char *oldchars, char *newchars) { // utility string function char *p = strstr(src, oldchars); char buf[MAX_STRING_LENGTH]; do { if (p) { memset(buf, '\0', strlen(buf)); if (src == p) { strcpy(buf, newchars); strcat(buf, p + strlen(oldchars)); } else { strncpy(buf, src, strlen(src) - strlen(p)); strcat(buf, newchars); strcat(buf, p + strlen(oldchars)); } memset(src, '\0', strlen(src)); strcpy(src, buf); } } while (p && (p = strstr(src, oldchars))); }
reza
https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/replace/
Using strings is easy too, but I suggest you *don't use it* because it makes memory problems in future.
reza
this code is really fragile!
Could you make it better or show me a new way?
Slava
https://www.youtube.com/watch?v=0qSU0nxIZiE
Гоша
if you really have to use C for strings I would recommend to use something like this: https://github.com/jef-sure/ili9341_dgx/blob/main/main/str.h
Кстати, функция на 221 строке она не ищет строку, которую заменить надо. Она просто заменяет
Гоша
это не совсем то что нужно было
Гоша
похоже на то как splice в JS работает
Anton
я потому сообщение про 221ю строку и удалил, что там надо "комбинацию" писать. но в отличии от предложенного кода, этот сложнее взорвать.
Гоша
тут надо по хорошему весь файл тащить. потому как требуются другие функции для работы с этим строковым типом
Anton
он небольшой и полезный. я написал его лет 15 назад...
Гоша
типа, str_destroy, str_empty, str_new_ln
Гоша
о, тогда объясните пожалуйста, нафига в _str_t поле char data[1] ??
Anton
о, тогда объясните пожалуйста, нафига в _str_t поле char data[1] ??
тогда объясню. чтобы понять это поле надо увидеть как выделяется рам
Anton
фишка с последним полем типа массив длины 0 или 1 полезна когда память всё равно выделяется маллоком и можно указать сколько ж тебе на самом деле там надо
Anton
в моём случае там 1 дополнительный символ под \0 в случае если вдруг спрося аскии-зет строку
Гоша
а ещё вопрос, зачем выравнивание?
Anton
оптимизация мелкая. выравнивание выделенных блоков рам всё равно существует, так зачем лишний раз перевыделять тот же на самом деле кусок, если ты, к примеру, к строке по одному символу добавлешь
Anton
я мельком помню смотрел алгоритм маллока у есп32, там выравнивание, если правильно помню, 4 байта. потому тут так же
Гоша
Т.е. если я правильно понимаю, Вы полагаетесь на то, что всё равно память выделяется кратно 4 байтам. И если Вам надо, скажем, 13 байт, то Вы запросите у системы 16 с выравниванием?
Anton
если надо 13, я запрошу 16 и получу 16. если я запрошу 13, то получу всё равно 16, но не буду об этом знать и при добавлении 1 символа буду выделять новый блок на 14
Гоша
да, я так и понял ) Хитро )
Anton
интерфейс маллока не предполагает сообщить настоящий размер выделенного блока, к сожалению. было бы удобно
Гоша
ага. Тогда и выравнивание не потребовалось бы
Гоша
Интересно почему заморский гость сказал на String из ардуино что оно может создать проблемы с памятью в будущем?
Гоша
Using strings is easy too, but I suggest you *don't use it* because it makes memory problems in future.
Could you please clarify what you mean when you say "memory problems"?
Anton
возможно, он имел в виду, что постоянное выделение динамической памяти приводит к проблемам. но его подход с фиксированным буфером точно хуже, там можно стек порушить на раз
Гоша
а как же zero-cost abstractions в C++? вроде там не должен быть большой оверхед. Стандартной библиотеки там всё равно нет.
Гоша
по поводу памяти - есть же способ - написать свой аллокатор
Гоша
хотя для небольшого проекта на ардуино это будет оверкил
Гоша
тем более для конкретной задачи замены подстроки
Гоша
но вообще концепция очень полезная для больших проектов где часто приходится объекты создавать/разрушать.
Anton
по поводу памяти - есть же способ - написать свой аллокатор
который опирается на что? на тот же маллок?
Anton
все остальные интерфейсы платформо-специфичны
Гоша
который опирается на что? на тот же маллок?
это потенциально поможет уменьшить фрагментацию памяти и ускорить создание/удаление объектов
Гоша
то что оно на malloc/free - это да
Гоша
это я не до конца понимаю про что именно :) мувейбл конструктор?
давайте начнём с того о каком недостатке C++ (по сравнению с C) идёт речь?
Anton
это потенциально поможет уменьшить фрагментацию памяти и ускорить создание/удаление объектов
попытки решить вопрос фрагментации сложнее чем выравниванием могут (и как правило так и делают) вызывать заметный рост алгоритмической сложности, непредвиденные задержки на выделение рам, что для микроконтроллеров считается заметно вредным