Arduino Char数组映射重叠

时间:2014-09-29 01:52:35

标签: c char arduino

我正在尝试将字符串传递给c中的函数,并且出于某种原因,即使我没有为变量设置值,但它已经拥有另一个变量的值,如果我更改它,则更改似乎覆盖另一个变量。这是代码:

void reverse(char *s, char *reverse)
{
  uint32_t length = str_length(s);
  Serial.println(reverse);
  Serial.println(s);
  for (uint32_t i = 0; i < length; i++)
  {
    Serial.print(length - i - 1);
    Serial.println(s[length - i - 1]);
    reverse[i] = s[length - i - 1];
  }
  for (uint32_t i = 0; i < length; i++)
  {
    Serial.print(i);
    Serial.println(s[i]);
  }
  reverse[length] = '\0';
  Serial.println(reverse);
}

char* readstring()
{
  char s[128]; 
  readline(s, 128);
  return s;
}

char* str_reverse(char *r)
{
  char rev[128];
  reverse(r, rev);
  return rev;
}

readstring()在代码中先前调用,并成为str_reverse中的参数r。如果我输入face作为我的字符串,那么这是输出:

face
face
3e
2c
1c
0e
0e
1c
2c
3e
ecce

为什么它将字符串映射到同一个内存插槽?

1 个答案:

答案 0 :(得分:1)

代码中的一个主要问题是如何在sreadstring() rev中创建数组str_reverse()。这两个实例都是在被调用函数的堆栈中创建的(它们各自的函数),并在返回时释放。自动“释放”(使用语言规范的生命周期结束时间)将允许新功能为其堆栈重用相同的内存。这给了你重叠的幻觉。

要进行测试,要查看代码中的其他问题,请将这些数组用作static或全局。