ESP32 中的那些坑

一、nvs_get_str()函數

函數原型:

esp_err_t nvs_get_str (nvs_handle handle, const char* key, char* out_value, size_t* length);

坑:

length這個參數奇葩得很,如果out_value的值爲NIULL,它將返回鍵所對應字符串的長度(含\0),而如果out_valueNULL,則將其當作out_value的長度與字符串長度比較,如果該值小於字符串長度,就會返回ESP_ERR_NVS_INVALID_LENGTH
如果錯誤地將required_size單純認爲是所讀字符串,並使用如下調用方式會讀到錯誤的數據:

nvs_get_str(my_handle, "server_name", server_name, &required_size);

正確姿勢:

size_t required_size;
nvs_get_str(my_handle, "server_name", NULL, &required_size);
char* server_name = malloc(required_size);
nvs_get_str(my_handle, "server_name", server_name, &required_size);

教訓:

nvs.h文件裏面明確的說明了這一點,所以說,在使用函數前還是得仔細讀讀函數註釋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章