【发布时间】:2013-06-18 12:26:57
【问题描述】:
我在循环函数中有以下几行:
item = String(buffer);
Serial.println(item);
其中 item 是 String 并且 buffer 是 char 数组。在我在文件末尾(循环函数之外)添加一个函数之前,这非常有效:
void storeData(String item){
Serial.println("StoreData");
for (int k=0; k<11; k++){
Serial.print("*");
if(item == products[k]){
items[index] = names[k];
index++;
Serial.print("\n");
Serial.print(item);
Serial.print("\t");
Serial.print(names[k]);
}
}
}
它将字符串item 与值列表进行比较,如果找到值,则存储相应的名称。
当我在最后添加这段代码时,即使我不调用该函数,转换的输出也变为:
978973103 Á
9789731030418
第一个值是错误的转换,第二个是buffer的值。
可能会发生什么?我一遍又一遍地重新启动、重新布线和重做一切。
【问题讨论】:
-
如果没有内存问题(内存不足),您确定 item = String(buffer) 复制了一个空终止的数组吗?分配后立即快速打印应该可以解决这个问题。如果项目是正确的,正如其他人指出的那样,MemoryFree 库很好用,至少在开发期间可以密切关注可用内存。
-
数组包含不超过 14 个字符(数字)。它被正确打印(
9789731030418),而不是混乱的转换978973103 Á... -
有一次我遇到了一个奇怪的问题,我将一个 char 缓冲区传递给一个函数,一段时间后程序状态会变得很奇怪。我从函数调用中删除了 char 缓冲区并将其用作全局变量,一切都很好。我还读到String类型在早期版本中有一些分配错误,你的编译器是什么版本?
-
谷歌搜索字符串分配错误google.ca/…