一、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_value非NULL,則將其當作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文件裏面明確的說明了這一點,所以說,在使用函數前還是得仔細讀讀函數註釋。