我将本地缓冲区传递给函数:
void func1()
{
char buffer[128];
func2(buffer);
}
void func2(char *buff)
{
strcpy(buff, "Some String");
}
现在当我在函数调用后查看buff的值时,它只有“S”而rest是空的。
现在,如果我将缓冲区设为全局或静态,那么我可以整个字符串。
我的问题是我们将缓冲区的地址传递给函数,因此无论是本地还是全局都无关紧要。但是,对于声明为local的情况,我不会将数据恢复到缓冲区中。
答案 0 :(得分:2)
因为您在堆栈上声明了缓冲区,所以在func1
退出后它是 undefined 。但是,如果您将其声明为全局或静态,则其范围不会受限于函数调用,因此您可以继续访问它。只是拥有缓冲区的地址并不会神奇地使其内容有效。
答案 1 :(得分:2)
当你在调试器中说“* buff的值”时,你意识到这只是字符串中的一个字符,对吧?其余的字符在堆栈旁边。
我不打算运行这段代码。这里的其他人都说工作得很好。
答案 2 :(得分:0)
您的代码没问题 - 您如何查看缓冲区的内容?如果您在printf("%s\n", buffer)
末尾添加func1()
,则会看到它正常运行。
答案 3 :(得分:0)
这里的问题并不明显,但是由于你已经标记了“RTOS”这个问题,这个任务的堆栈是否可能太小而无法容纳128字节的数组?