【发布时间】:2021-11-12 10:11:36
【问题描述】:
在为多个片上系统微控制器提供的软件中,我发现了这段代码
String getMacAddress() {
uint8_t baseMac[6];
char baseMacChr[13] = {0};
# if defined(ESP8266)
WiFi.macAddress(baseMac);
sprintf(baseMacChr, "%02X%02X%02X%02X%02X%02X", baseMac[0], baseMac[1], baseMac[2], baseMac[3], baseMac[4], baseMac[5]);
# elif defined(ESP32)
esp_read_mac(baseMac, ESP_MAC_WIFI_STA);
sprintf(baseMacChr, "%02X%02X%02X%02X%02X%02X", baseMac[0], baseMac[1], baseMac[2], baseMac[3], baseMac[4], baseMac[5]);
# else
sprintf(baseMacChr, "%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
# endif
return String(baseMacChr);
}
String 由 Arduino 上下文提供。那么在那些微控制器上,这段代码安全吗?
我知道返回变量的范围/寿命存在问题(这里很好解释:Returning a C string from a function),大多数人使用std::string,但我在上下文中没有任何经验微控制器,因为我已经看到它使用了很多,所以我想出了这个问题。
我没有找到任何关于它的文档,欢迎提供所有额外信息。
【问题讨论】:
标签: c++ arduino arduino-c++