Зачистить массив - это одно, а сделать пустую строку - другое (по смыслу). Потом будете объяснять, как из "пустого массива" куча разнообразных значений вылавливается.
2ТС: массив байтов и нуль-терминированная строка, которая применяется в Си, в сущности одно и то же - выделенная область последовательно идущих ячеек памяти. Встроенные строковые функции работают просто: "просматривают" ячейки памяти от нулевой и далее, не ориентируясь на указанный вами при создании таковой строки размер. Как только в текущей позиции '\0' увидели, то считают, что строка закончилась и завершают работу. А если не увидели, то будут далее просматривать всё по порядку, а это может быть очень долго.
Однако из этого не следует, что помещение '\0' в нулевую ячейку очищает вообще всю выделенную под массив область памяти. Для реального "обнуления" нужно поместить '\0' во все ячейки, пробежав for-ом по всей длине или с помощью memset(), например.
Какой из способов выбрать - нужно решать по месту. Например, сделали вы "пустую строку" через '\0' в нулевой ячейки, а потом в нее пихнули что-то из Serial.read(). И вот у вас уже нет строки с точки зрения внутренних функций, работающих со строками и strlen() будет показывать каждый раз безумные числа.
т.е. если я начну читать со 2-й позиции то там так и остануться данные?
т.е. если я начну читать со 2-й позиции то там так и остануться данные?
Можете проверить.
Но не считайте совет b707 вредным, этот способ достаточно экономен для progmem space, но должен применяться с учетом происходящих в вашей программе процессов.
d13lider - ваш код в #47 неверный. а в #49 вы исправились.
Что касается способа "зачистки данных" - замечание sadman41 верное. Способ зависит от того, как вы используете массив buf[]. Если ваша программа трактует buf как массив байт - надо чистить каждый элемент массива, как рекомендует sadman41. Если это нуль-терминированная строка - достаточно вставить терминатор только в первую (нулевую) позицию, как писал я
Не путайте человека, он и сам запутается :))
Зачистить массив - это одно, а сделать пустую строку - другое (по смыслу). Потом будете объяснять, как из "пустого массива" куча разнообразных значений вылавливается.
2ТС: массив байтов и нуль-терминированная строка, которая применяется в Си, в сущности одно и то же - выделенная область последовательно идущих ячеек памяти. Встроенные строковые функции работают просто: "просматривают" ячейки памяти от нулевой и далее, не ориентируясь на указанный вами при создании таковой строки размер. Как только в текущей позиции '\0' увидели, то считают, что строка закончилась и завершают работу. А если не увидели, то будут далее просматривать всё по порядку, а это может быть очень долго.
Однако из этого не следует, что помещение '\0' в нулевую ячейку очищает вообще всю выделенную под массив область памяти. Для реального "обнуления" нужно поместить '\0' во все ячейки, пробежав for-ом по всей длине или с помощью memset(), например.
Какой из способов выбрать - нужно решать по месту. Например, сделали вы "пустую строку" через '\0' в нулевой ячейки, а потом в нее пихнули что-то из Serial.read(). И вот у вас уже нет строки с точки зрения внутренних функций, работающих со строками и strlen() будет показывать каждый раз безумные числа.
т.е. если я начну читать со 2-й позиции то там так и остануться данные?
т.е. если я начну читать со 2-й позиции то там так и остануться данные?
Можете проверить.
Но не считайте совет b707 вредным, этот способ достаточно экономен для progmem space, но должен применяться с учетом происходящих в вашей программе процессов.
Ну самое главное понял что делает эта функция, и правда мне необходима, потому что мне приходиться читать не с первой позиции
d13lider - ваш код в #47 неверный. а в #49 вы исправились.
Что касается способа "зачистки данных" - замечание sadman41 верное. Способ зависит от того, как вы используете массив buf[]. Если ваша программа трактует buf как массив байт - надо чистить каждый элемент массива, как рекомендует sadman41. Если это нуль-терминированная строка - достаточно вставить терминатор только в первую (нулевую) позицию, как писал я
Все понятно и доходчиво, спасибо вам большое