[英]C++ How to save char* into array of char* []
我有一个byte*
我正在保存到一个char[]
打印 char[] 我得到
0,1023,1023,1000;0,0,1023,1000;1023,0,0,1000;1023,1023,0,1000;0,1023,0,1000
我将它传递给使用 strtok 拆分“;”的函数,将该值保存到char *colorsAtTick;
,然后我试图将其保存到数组中char *colorsAtTickArray[] = {};
通过做colorsAtTickArray[patternLength] = colorsAtTick;
但是在循环中尝试访问colorsAtTickArray[i]
时出现错误。
代码是:
void callback(char* topic, byte* payload, unsigned int length)
{
//save payload bytes into char
char pattern[length+1];
for (int i = 0; i < length; i++)
{
pattern[i] = (char)payload[i];
}
pattern[length+1] = '\0';
Serial.print("this is the whole pattern: ");
Serial.println(pattern);
splitPatternTicks(pattern);
}
void splitPatternTicks(char *pattern) {
char *colorsAtTick;
char *colorsAtTickArray[] = {};
//split pattern on ";" into chars
colorsAtTick= strtok (pattern,";");
while (colorsAtTick != NULL)
{
Serial.print("split on ; -->");
Serial.println(colorsAtTick);
//save the chars into an array
colorsAtTickArray[patternLength] = colorsAtTick;
patternLength ++;
colorsAtTick = strtok (NULL,";");
}
for (int i = 0; i < patternLength; i ++) {
//loop over the array of char to further split and save values
//colorsAtTickArray ex. "255,0,0,1000"
Serial.println("trying to parse values, sending ->");
Serial.println(colorsAtTickArray[i]);
//line above prints a blank line, then an error is thrown
//parseTickValues(colorsAtTickArray[i], patternLength);
//list[i] -> printObj();
}
}
终端输出:
这是整个模式:
0,1023,1023,1000;0,0,1023,1000;1023,0,0,1000;1023,1023,0,1000;0,1023,0,1000
split on ; -->0,1023,1023,1000
split on ; -->0,0,1023,1000
split on ; -->1023,0,0,1000
split on ; -->1023,1023,0,1000
split on ; -->0,1023,0,1000
trying to parse values, sending ->
Exception (28):
epc1=0x40208ccc epc2=0x00000000 epc3=0x00000000 excvaddr=0x0000000c depc=0x00000000
stack
ctx: cont
sp: 3ffffcf0 end: 3fffffc0 offset: 01a0
3ffffe90: 40203124 3ffee720 0000000c 402033f8
3ffffea0: 3ffee608 3ffee720 3ffee720 40203465
3ffffeb0: 3ffee608 3ffee720 00000000 40201224
3ffffec0: 0000000c 0000004b 3ffee720 40203448
3ffffed0: 0000000c 3ffee720 3ffee720 3fffff40
3ffffee0: 0000000c 3ffee720 3ffffef0 40201290 <
3ffffef0: 30312c30 312c3332 2c333230 30303031
3fffff00: 302c3000 3230312c 30312c33 31003030
3fffff10: 2c333230 2c302c30 30303031 32303100
3fffff20: 30312c33 302c3332 3030312c 2c300030
3fffff30: 33323031 312c302c 00303030 6bc6a700
3fffff40: 00000001 00005b68 3ffee60c 4020525c
3fffff50: 3fffdad0 00005b68 3ffee60c 4020300c
3fffff60: 007a1201 73c993ca 3ffee700 40202e90
3fffff70: 00000004 3ffee60f 0000005b 402010b5
3fffff80: 00000000 00000000 3ffee60c 3ffee798
3fffff90: 3fffdad0 00000000 3ffee60c 402011a0
3fffffa0: 3fffdad0 00000000 3ffee758 40203b80
3fffffb0: feefeffe feefeffe 3ffe84e8 40100bdd
<<<stack<<<
⸮n⸮⸮⸮⸮⸮⸮
我正在测试我试图在 repl 中完成什么,但我也有问题(在这个例子中,只有 3 个打印了 2 个) https://repl.it/@jordanklaers/arrayOfChars
你off by 1 error
。
pattern[length+1] = '\0';
这将覆盖数组末尾并替换导致错误的堆栈上的信息
pattern
数组中的最后一个元素将是pattern[length]
您还在 for 循环中包含了一个常见错误。 请看这篇文章的解释
感谢 Sam Varshavchik 和其他提到这个问题的人,我通过使用
char *colorsAtTickArray[ticks];
其中 ticks 是一个变量,表示值的数量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.