我想提出一個功能,即讀串行和匹配到一定值時,如果再匹配我存儲string1
在變量x
,否則我儘量匹配讀串口與第二字符串,如果然後它匹配我店string2
在x
等。現在我想讓這個函數將這個字符串(存儲在變量x中)從它被調用的地方返回到main函數。如何在arduino上創建函數返回字符串?
1
A
回答
7
你有幾個選擇。您可以讓來電者提供將被用來存儲返回值的緩衝區:
void foo0(char * buf, int maxBufferSize) {
while(maxBufferSize && *buf = getByteFromSerial()) { //assumes getByte returns 0 for done
maxBufferSize--;
}
} // If you really feel like it, you can alter this to return the original buf
你可以有方法本身維護它使用的返回值的緩衝區:
char * foo1() {
static char buf[BUF_SIZE+1];
int copiedBytes = 0;
while (copiedBytes<BUF_SIZE && buf[copiedBytes++] = getByteFromSerial());
buf[copiedBytes] = '\0';
return buf; // Note that when you call foo() again, this will be destroyed.
}
你可以有方法分配緩衝區:
char * foo2() {
static char buf[BUF_SIZE+1];
// do all the stuff from the previous version
char * retval = malloc(copiedBytes);
strcpy(retval, buf);
return retval;
}
這最後的解決方案有一些問題。是的,你必須記住要釋放,但更糟糕的是,對於內存很少的東西的動態內存分配應該嚇跑你。有關詳細信息,請查找內存碎片。想想看,正是由於這個原因,我從來沒有在微處理器上使用過malloc。當可用內存很少時,您可以想出更好的方法來自己動態分配內存。
我的偏好是讓調用者提供緩衝區。通過這種方式,任何必要的分配和釋放都在堆棧中整齊地處理,並且您沒有多次調用者的問題,即上面的foo1()會緊緊跟隨您。
void someFunction() {
char buf[BUFF_SIZE+1];
fillMyBuffer(buf, BUFF_SIZE);
doSomethingWithMyBuffer(buf);
}
這樣,當someFunction的回報,它的緩衝區不再佔用內存和我沒有在我的程序的功能,有一個靜態緩衝區佔用的是隻可極少使用的空間。
相關問題
- 1. 如何返回在函數中創建的字符數組?
- 2. 如何從函數返回字符串
- 3. 返回字符串函數
- 4. Arduino:傳遞函數給類,返回字符串
- 5. 從函數返回字符[] /字符串
- 6. 遞歸函數不返回創建的字符串
- 7. 需要幫助創建scss函數來返回字符串
- 8. 創建一個字符串函數返回一個月
- 9. 如何在Arduino上傳輸字符串?
- 10. 數字函數返回字符串
- 11. Arduino Micro Serial.print字符串不返回字符串
- 12. 返回新創建的字符串
- 13. 如何創建打字稿並返回字符串枚舉
- 14. 如何在node.js中將字符串從回調函數返回到根函數?
- 15. 如何在lua中創建一個字符串字典函數?
- 16. 如何在C++函數中返回字符串
- 17. 如何在C++中調用返回C#字符串的函數?
- 18. 如何在C++函數中返回字符串?
- 19. 函數說明返回字符串?
- 20. 從函數返回字符串c
- 21. 從C++主函數返回字符串
- 22. PHP函數返回字符串
- 23. 用C++ Lua函數返回字符串
- 24. 字符串函數不返回
- 25. PHP:從函數返回字符串
- 26. 從函數返回字符串
- 27. 字符串函數返回seg錯誤
- 28. swift函數不返回字符串?
- 29. Java - 從函數(字符串)返回int?
- 30. Jquery .html返回函數字符串
當然,你只是'返回x'? –
@AlexP:Noooooo no no no no no no no。 –