Вот тут вы очень верное место жирным выделили, хотя и не понимаете этого. У вас в этой строке определена НОВАЯ переменная с, локальная для цикла while. И с выходом из этого цикла эта переменная перестает существовать. Раз код все-таки компилируется, то очевидно существует другая, глобальная переменная с, которую вы и присваиваете элементу буфера. Но значение в ней совершенно другое, не то что считано из файла.
без шансов. Смотри внимательно, обьяснение выше. И остальные куски кода не лучше. Это не код, а полная помойка.
Вы показали кусок кода, который только считывает значение из файла. Лучше покажите, как вы его перезаписываете.
ослепли что ли:
int editValue(const char *section_name, const char *key_name, const char *new_value) {
@b707 , в скобках не обсчитались? В 9 строке твоего кода скобка } не от while а только от if.
По крайней мере с переменной “c” вроде всё так. В подробности с буфером не вникал.
по крайней мере я хоть что то сделал, и оно работает, и не просто строю из себя ГУРУ, а делаю, а не языком как помелом мету. Если Вам что_то не нравится, предложите лучше, а так получается на “Словах Лев Толстой, а на деле…” . Всего доброго!
Да b707 что то не туда понесло.
Может быть имеет смысл указать требования к формату файла, которые позволяют обновлять значения более длинными строками.
Твой говнокод надо отсюда немедленно удалить
Код перезаписи не смотрел.
Однако переписать строку на более длинную, не сдвигая остального файла - НЕВОЗМОЖНО В ПРИНЦИПЕ. Где у вас логика, неужели вы этого не понимаете?
У вас, случаем, это значение в файле не последнее? Это бы обьяснило, почему этот код якобы “работает”.
обсчитался, да
Наверное хамство заразное, или очень привлекательное.
Помню когда я зарегистрировался на этом форуме пару лет назад, DetSimen спрашивал у главного -“Нужно ли нам грамотное, но хамло на форуме?”. Вероятно ответ был “Да и побольше”.
@Komandir @kalapanga
Ок, пусть со скобками я обсчитался и с символом c
все нормально. Но код все равно кривой до жути.
Вот смотрим на этот кусок:
byte buff_size = 80;
char buffer[buff_size];
int buffer_pos = 0;
while (_File.available()) {
char c = _File.read();
if (c == '\r') {
continue;
}
buffer[buffer_pos++] = c;
if (c == '\n' || buffer_pos == buff_size - 1) {
В каких случаях последнее условие может оказаться истинным? Вторая часть, очевидно, не сработает никогда, потому что buffer_pos
у нас всегда 1,а buff_size - 1
всегда 79
Теперь смотрим первую часть - c == '\n'
- поскольку условием выхода из предыдущего цикла while является либо равенство символа c
значению \r
, либо конец файла - значит условие может сработать в том единственном случае, когда мы дошли до конца файла и файл кончается на \n.
То есть секция, в которой меняется значение, обязательно должна быть последней и никак иначе.
Или я опять где-то что-то проглядел?
Нууу, теперь твоя очереть спрашивать.
Это как так то - он же инкрементируется в while ? Может забухать пора ?
О. плять… я продолжаю считать, что цикл while кончается на скобке от If
Ок, пусть тогда нейросети программируют.
Пойду слушать “В Питере пить” - самая подходящая песня под момент.
@Soyer
у вас все хорошо. Только почему-то буквы задвоились в значении SSID… но это же неважно, главное “работает”
Ну слава богу - РАЗОБРАЛИСЬ …
Пока удалял Serialprint’ы случайно снес одну строку, позже подправлю.
Когда достигнут конец строки, либо строковый буфер переполнен, проверяются дальнейшие условия. Я не стал вводить в аргументы длину буфера, и делать его больше, для меня 80 символов в строке хватает.