2017-01-12 3 views
0

Я новичок в разработке C и Arduino и задаюсь вопросом, что здесь происходит. Код должен печатать ответ из HTTP-запроса, но вместо этого он отключается примерно через 300 байт.Что происходит в этом коде C/Arduino?

static void my_callback (byte status, word off, word len) { 
    Ethernet::buffer[off+300] = 0; // <-- 
    Serial.print((const char*) Ethernet::buffer + off); // <-- 
} 

В JavaScript Ethernet::buffer[off+300] = 0 будет означать, вы присваиваете значение 0 к чему-то в объекте или массив, в положении [off+300]. Почему это делается здесь до результат возвращается или вообще?

Далее добавляется значение Ethernet::buffer к значению off (что является числом). Таким образом, результат должен быть числом, но вместо этого это строка.

Любое понимание того, что здесь происходит, было бы действительно оценено. Благодарю.

Источник: EtherCard examples

+1

Это не C, может быть C++. – Lundin

+0

Чтобы прочитать этот код, вам нужно понять указатели и арифметику указателя. Начать обучение [здесь] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) – Drop

+0

@ Lundin: Arduino тоже не совсем C++. – Olaf

ответ

1

Назначение 0 убеждается строка завершается в 300 символов после off. В C и C++ базовые строки представлены как массивы символов и используют символ со значением 0, чтобы указать конец строки.

Это может быть защита от печати слишком много на консоли, например.

Добавление на линии print является указателем арифметики, это не «число» (или, под капотом, конечно, это число, с которым все компьютеры имеют дело, но семантически есть разница). Добавление номера в адрес строки в C (и C++ здесь) получает вам суффикс, то есть пропускает много символов в строку.

Смежные вопросы