gpt4 book ai didi

c++ - Arduino C++,奇怪的数组行为

转载 作者:行者123 更新时间:2023-11-30 03:02:52 26 4
gpt4 key购买 nike

我有一个 Arduino,它通过将字符串拆分成数组来处理它。然而,由于某种原因,在处理函数返回后,数组只能被访问一次,然后才会出现值被破坏的情况。换句话说,我可以访问数组的任何元素,但是当我这样做时,我无法访问数组的任何其他元素。

void loop(){
int pin;
Serial.print("Enter command: ");
while(Serial.available()<=0)
delay(100);
///Input to the serial terminal was: "This;is;a;command". Notice how inside the getCommands() function, it will output all elements ok

char** commands = getCommands();
Serial.println(commands[1]); ///prints "is"
Serial.println(commands[0]); ///**** prints nothing, or sometimes infinite spaces****
delay(1000);
}
char** getCommands(){
char* commandIn = getSerialString();
char* commands[10];
char *str;
int i=0;
while ((str = strtok_r(commandIn, ";", &commandIn)) != NULL){

commands[i]=str;
i++;
}
Serial.println(commands[0]); ///prints "This"
Serial.println(commands[1]); ///prints "is"
Serial.println(commands[2]); ///prints "a"

return commands;
}
char* getSerialString(){
while(Serial.available()<=0)
delay(100);
int i=0;
char commandbuffer[100];
for(int a=0; a<100; a++)
commandbuffer[a]='\0';

if(Serial.available()){
delay(100);
while( Serial.available() && i< 99) {
commandbuffer[i++] = Serial.read();
}
commandbuffer[i++]='\0';
}
return commandbuffer;
}

最佳答案

char** getCommands(){
char* commands[10];

return commands;
}

语句return commands 不返回数组的,它返回数组的地址。从技术上讲,在此上下文中,表达式 commands 的类型从 array-10-of-pointer-to-char 衰减到 pointer-to-pointer-to-char;表达式的值是数组第一个元素的地址。

因此,您返回一个局部变量的地址,该局部变量在 return 语句后不复存在。稍后,在 loop 中,您将此指针取消引用到已销毁的对象,从而导致未定义的行为。

关于c++ - Arduino C++,奇怪的数组行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com