2017-01-12 29 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就意味着你在[off+300]位置分配的0值是爲對象或數組的東西。爲什麼在之前完成結果返回,或者根本沒有?

接下來,將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++)中的字符串地址中添加一個數字可以獲得後綴,即將多個字符跳到字符串中。