Управляющие символы ASCII - хаос!))

Не ради спора, а ради уточнения: разве не может быть строки длинной 1 символ?

Да, но не пробел. И тоже, непонятно, чего такого нештатного в передаче “отсутствия символа”? Почему тогда и Putty и Proteus правильно отображают этот символ? Т.е. никак не отображают
Screenshot_0001
Я лишь к тому, с чего и начал - нет единообразия, хаос))

Может даже 0 символов.

Пробел - это символ.

Как можно передать то, чего нет?

Это вопрос ко мне?
А, кстати, если бы Вы писали программу, какую бы Вы предусмотрели реакцию на байты, которые не являются ни символами, ни служебными кодами?

Да нет здесь никакого хаоса: пишите программы без ошибок и не будете сталкиваться с неопределенностью в их поведении.

Сразу вспомнился анекдот про 5кг ни*уя.

И я о том же. Но Arduino IDE в своём терминале выводит почему-то его вместо ‘\0’

Ну даже не знаю что сказать)) Ведь символа ‘\0’ нет только на экране, но он есть в HEX, а значит его можно использовать как метку , например, для сортировки и.т.п.

Просто игнорировал бы такие байты. Но ведь ‘\0’ к таким не относится, он как раз служебный

В том то и дело, что не вижу в своей программе ошибки, а ошибки есть в некоторых программах - терминалах, чему я нашёл подтверждение даже в Википедии

В общем, нашёл подтверждение своим мыслям ещё в первом посте от Green-а, разве что добавил-бы в список символ ‘\0’
Так что , в принципе, тему можно считать решённой.

Интересно, на всех терминалах одинаков код символа?

void setup() {
  Serial.begin(9600);
  delay(300);
}


void loop() {
//  static byte chislo = 0;
//  Serial.print(chislo);
  Serial.print('\n', HEX); // перенос строки
//  chislo++;
  delay(1000);
  Serial.print("   ");
}

Ну, этот код не совсем корректен, как по мне, т.к. это не терминал отобразит символ в HEX, а функция ардуино .

А так да , все терминалы , что я пользовался отображали HEX верно, но , к , сожалению, так и не нашёл, как вывести данные в HEX в Putty и Aarduino IDE

Ошибка именно Ваша - Вы ожидаете от чужой программы поведения, которое нужно Вам, а не то, которое заложил автор программы. Если автор в свою программу заложил, что символ \0 будет отображаться на экране хером, и он так и отображается, значит программа работает правильно! Не нравится - пишите свой терминал с преферансом и поэтессами.

“Проблема” высосана из пальца !

)) Особенно, если ты сам с ней не сталкивался.

По большому счёту так и есть, в принципе, никто никому ничего не должен. Правильнее , для меня, будет лишь сказать, что в этой программе соблюдаются такие-то правила, а в этой не соблюдаются

Да, если знать нюансы, этой проблемы не существует.

Далее Вы приводите фрагмент Википедии. Почитайте, там как раз об этом написано.

Вообще глупость написана.
Вот, скажем, числа 4 нет среди простых чисел, а HEX для него есть. Это чему-то противоречит?

Используйте. Только внутри программы. А передавать его в текстовом сообщении нельзя.

Он служебный в Си. И именно тот факт, что он отсутствует среди символов допустимых для передачи, и дал возможность использовать его как служебный в Си.
Нет символов заведомо служебных либо каких-то других. Но есть масса стандартов, которые определяют, где и какие символы используются. Соответственно нужно смотреть, для чего нужен конкретный стандарт и не пытаться использовать его вне рамок применимости.

В Википедии можно найти массу полезного, но только при условии, что ее не считают истиной в последней инстанции. Кстати, и сама Википедия считает собственной отличительной чертой то, то ее статьи написаны неспециалистами.
Ваша ошибка в том, что Вы пытаетесь использовать нечто не по назначению. А вот насчет ошибок “некоторых программ” - вопрос спорный, .к. ни одна программа не обязана обрабатывать неверные данные - она должна лишь не допускать деструктивного поведения, например, приступать к форматированию жесткого диска при приеме нулевого символа. Т.е. реакция программы на ошибочные входные данные должна быть разумной, но никак не единообразной с другими программами. Хотя в данном случае я с Вами согласен: программа поступает не по стандарту.

По-моему мы здесь вообще ерундой занимаемся.
Вот для кириллицы есть масса различных кодировок, причем минимум 5 из них достаточно распространены.
И что теперь, будем обсуждать каждую букву, код которой различается в разных кодировках?

Единственное, где приходилось использовать “/0”, это при проверке ввода в ячейку WEB страницы переменной в ESP32. Если строковая переменная приходила с данным кодом, это означало, что в ячейку ни чего не вводили.

Во -от, хоть в чём то со мной соглашаетесь, осмелюсь теперь думать , что в программировании для меня ещё не всё потеряно ))
И ,спасибо за подробные разъяснения

Скорее так и есть, но по крайней мере одному человеку(мне) эта тема помогла лучше разобраться в этом вопросе))
На сих буду кланяться, всем спасибо, не знаю чего тут ещё “из пальца высасывать” всё вроде ясно

Любопытное наблюдение.
Я бы так делать не рискнул. В первую очередь потому, что нет никаких гарантий получить строку с нулевым символом. Более того, если строка с нулевым символом все-таки приходит, это говорит о том, что программист, писавший эту программу, не придерживается стандартов.
Кстати, а чем не угодили символы CR/LF? Они, вроде, как раз для этого и предназначены.

Когда много полей ввода на WEB странице, а меняем значение только в одном поле, а другие поля не трогаем, то этот способ очень удобен. Просто проверяешь в цикле, какая переменная была изменена, и только ее перезаписываешь в EEprom. Это существкнно ускоряет роаботу при перезаписи памяти контроллера (не надо обновлять все ячейки). Использовал эту возможность во многих проектах где требуется измененя переменных через WEB страницу. Всё работает нормально.

Еще раз: чем проверка на 0 удобнее проверки на CR или LF?

Тем, что в переменной возвращенной от веббраузера не появляются символы LF и CR а вот “/0” присваевает сам браузер при считывании ячейки.
к примеру в ESP32 формируем страницу:

      "<td colspan=3><input type='text' size=30 min=1 max=21  name='webname'></<td>"

далее

wname = server.arg("webname");

и потом проверяем

if (wname[0] != '\0') {...........}// Сохраняем wname в EEprom