我正在尝试将字符串传递给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
为什么它将字符串映射到同一个内存插槽?
答案 0 :(得分:1)
代码中的一个主要问题是如何在s
和readstring()
rev
中创建数组str_reverse()
。这两个实例都是在被调用函数的堆栈中创建的(它们各自的函数),并在返回时释放。自动“释放”(使用语言规范的生命周期结束时间)将允许新功能为其堆栈重用相同的内存。这给了你重叠的幻觉。
要进行测试,要查看代码中的其他问题,请将这些数组用作static
或全局。