Не ради спора, а ради уточнения: разве не может быть строки длинной 1 символ?
Да, но не пробел. И тоже, непонятно, чего такого нештатного в передаче “отсутствия символа”? Почему тогда и Putty и Proteus правильно отображают этот символ? Т.е. никак не отображают
Я лишь к тому, с чего и начал - нет единообразия, хаос))
Это вопрос ко мне?
А, кстати, если бы Вы писали программу, какую бы Вы предусмотрели реакцию на байты, которые не являются ни символами, ни служебными кодами?
Да нет здесь никакого хаоса: пишите программы без ошибок и не будете сталкиваться с неопределенностью в их поведении.
И я о том же. Но Arduino IDE в своём терминале выводит почему-то его вместо ‘\0’
Ну даже не знаю что сказать)) Ведь символа ‘\0’ нет только на экране, но он есть в HEX, а значит его можно использовать как метку , например, для сортировки и.т.п.
Просто игнорировал бы такие байты. Но ведь ‘\0’ к таким не относится, он как раз служебный
В общем, нашёл подтверждение своим мыслям ещё в первом посте от Green-а, разве что добавил-бы в список символ ‘\0’
Так что , в принципе, тему можно считать решённой.
Ошибка именно Ваша - Вы ожидаете от чужой программы поведения, которое нужно Вам, а не то, которое заложил автор программы. Если автор в свою программу заложил, что символ \0 будет отображаться на экране хером, и он так и отображается, значит программа работает правильно! Не нравится - пишите свой терминал с преферансом и поэтессами.
По большому счёту так и есть, в принципе, никто никому ничего не должен. Правильнее , для меня, будет лишь сказать, что в этой программе соблюдаются такие-то правила, а в этой не соблюдаются
Далее Вы приводите фрагмент Википедии. Почитайте, там как раз об этом написано.
Вообще глупость написана.
Вот, скажем, числа 4 нет среди простых чисел, а HEX для него есть. Это чему-то противоречит?
Используйте. Только внутри программы. А передавать его в текстовом сообщении нельзя.
Он служебный в Си. И именно тот факт, что он отсутствует среди символов допустимых для передачи, и дал возможность использовать его как служебный в Си.
Нет символов заведомо служебных либо каких-то других. Но есть масса стандартов, которые определяют, где и какие символы используются. Соответственно нужно смотреть, для чего нужен конкретный стандарт и не пытаться использовать его вне рамок применимости.
В Википедии можно найти массу полезного, но только при условии, что ее не считают истиной в последней инстанции. Кстати, и сама Википедия считает собственной отличительной чертой то, то ее статьи написаны неспециалистами.
Ваша ошибка в том, что Вы пытаетесь использовать нечто не по назначению. А вот насчет ошибок “некоторых программ” - вопрос спорный, .к. ни одна программа не обязана обрабатывать неверные данные - она должна лишь не допускать деструктивного поведения, например, приступать к форматированию жесткого диска при приеме нулевого символа. Т.е. реакция программы на ошибочные входные данные должна быть разумной, но никак не единообразной с другими программами. Хотя в данном случае я с Вами согласен: программа поступает не по стандарту.
По-моему мы здесь вообще ерундой занимаемся.
Вот для кириллицы есть масса различных кодировок, причем минимум 5 из них достаточно распространены.
И что теперь, будем обсуждать каждую букву, код которой различается в разных кодировках?
Единственное, где приходилось использовать “/0”, это при проверке ввода в ячейку WEB страницы переменной в ESP32. Если строковая переменная приходила с данным кодом, это означало, что в ячейку ни чего не вводили.
Во -от, хоть в чём то со мной соглашаетесь, осмелюсь теперь думать , что в программировании для меня ещё не всё потеряно ))
И ,спасибо за подробные разъяснения
Скорее так и есть, но по крайней мере одному человеку(мне) эта тема помогла лучше разобраться в этом вопросе))
На сих буду кланяться, всем спасибо, не знаю чего тут ещё “из пальца высасывать” всё вроде ясно
Любопытное наблюдение.
Я бы так делать не рискнул. В первую очередь потому, что нет никаких гарантий получить строку с нулевым символом. Более того, если строка с нулевым символом все-таки приходит, это говорит о том, что программист, писавший эту программу, не придерживается стандартов.
Кстати, а чем не угодили символы CR/LF? Они, вроде, как раз для этого и предназначены.
Когда много полей ввода на WEB странице, а меняем значение только в одном поле, а другие поля не трогаем, то этот способ очень удобен. Просто проверяешь в цикле, какая переменная была изменена, и только ее перезаписываешь в EEprom. Это существкнно ускоряет роаботу при перезаписи памяти контроллера (не надо обновлять все ячейки). Использовал эту возможность во многих проектах где требуется измененя переменных через WEB страницу. Всё работает нормально.
Тем, что в переменной возвращенной от веббраузера не появляются символы LF и CR а вот “/0” присваевает сам браузер при считывании ячейки.
к примеру в ESP32 формируем страницу: