这个C / Arduino代码发生了什么?

时间:2017-01-12 15:40:14

标签: arduino

我是C和Arduino开发的新手,想知道这里发生了什么。该代码应该打印来自HTTP请求的响应,但它会在大约300字节后切断。

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 个答案:

答案 0 :(得分:1)

分配0可确保字符串在off之后以300个字符终止。在C和C ++中,基本字符串表示为字符数组,并使用值为0的字符来表示字符串的结尾。

例如,这可以防止在控制台上打印太多。

print行的加法是指针算术,它不是&#34;数字&#34; (或者,当然它是一个数字,所有计算机都在处理,但在语义上有区别)。在C(和C ++,这里)中添加一个数字到字符串的地址会得到后缀,即它会将那么多字符跳过到字符串中。