Arduino字符阵列怪异的符号



因此,在我的arduino程序中,我使用的是函数中的char数组。我试图全局保存它们,但无论如何保存,全局数组都只包含原始数组的一部分和大量的胡言乱语符号。

char* naam;
char* compliment;
byte color = 0;
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

doStuff();

Serial.println(naam);
Serial.println(compliment);
Serial.println(color);

}
void loop() {
// put your main code here, to run repeatedly:
}
void doStuff(){
String raw = "1234567890123456,abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz,0";
int i = raw.indexOf(",");
int j = raw.indexOf(",", i+1);
char a[i+1];
char b[j-i];

raw.substring(0,i).toCharArray(naam, i+1);
raw.substring(i+1,j).toCharArray(compliment, j);
color = (byte) raw.substring(j+2,j+3).toInt();
Serial.println(a);
Serial.println(b);
naam = a;
compliment = b;
}

有人能向我解释为什么这不起作用,并为我指明正确的方向吗?

在这里创建两个字符数组ab

char a[i+1];
char b[j-i];

在打印之前,您永远不会为其元素指定任何值。

因此,您将打印那些内存位置中的任何垃圾

对评论的回应:

它们由";toCharArray(赞美,j(&";。印刷品n(a(正确打印

当您第一次调用doStuff

您创建了两个未初始化的字符数组ab。然后将两个子字符串作为char数组存储到naamcompliment中。两个都未初始化的字符指针。所以你基本上是把东西存储在内存中的一个随机位置。

然后打印包含随机垃圾的ab

然后将地址存储在abnaamcompliment中。

一旦doStuff返回,a和b就超出范围。CCD_ 15和CCD_。

最新更新