我想将一些文本写入Arduino ESP32的闪存中。它有点能用,但不是我想要的方式。
void writeString(const char* toStore, int startAddr) {
int i = 0;
for (; i < LENGTH(toStore); i++) {
EEPROM.write(startAddr + i, toStore[i]);
}
EEPROM.write(startAddr + i, '\0');
EEPROM.commit();
}
我的呼叫
writeString("TEST_STRING_TO_WRITE", 0);
只将TEST写入内存。我不明白为什么会这样。是因为下划线吗?还是我漏掉了其他内容?
以下是使用的LENGTH宏:
#define LENGTH(x) (sizeof(x)/sizeof(x[0]))
我使用的方法再次从内存中读取字符串(似乎正确工作):
String readStringFromFlash(int startAddr) {
char in[128];
char curIn;
int i = 0;
curIn = EEPROM.read(startAddr);
for (; i < 128; i++) {
curIn = EEPROM.read(startAddr + i);
in[i] = curIn;
}
return String(in);
}
char string[23];
那么sizeof(string);
会返回23,即使您只存储了一个5个字符的字符串在字符数组中。如果您将string
作为参数传递给一个函数并在函数内部使用sizeof
,则 (很可能是,这取决于 CPU) 您会得到4,因为函数只知道char *
。sizeof
返回存储其参数所需的字节数。 - romkeyString
时会变得非常糟糕 - 如果你执行sizeof(String("verylongstring"))
,你将得到存储String
对象所需的字节数,而不是分配给它存储数据的字节数。这经常会让人感到困扰。 - romkey