传递本地缓冲区以实现功能

时间:2011-07-14 23:51:33

标签: c buffer

我将本地缓冲区传递给函数:

void func1()
{
    char buffer[128];
    func2(buffer); 
}

void func2(char *buff)
{
     strcpy(buff, "Some String");
}

现在当我在函数调用后查看buff的值时,它只有“S”而rest是空的。

现在,如果我将缓冲区设为全局或静态,那么我可以整个字符串。

我的问题是我们将缓冲区的地址传递给函数,因此无论是本地还是全局都无关紧要。但是,对于声明为local的情况,我不会将数据恢复到缓冲区中。

4 个答案:

答案 0 :(得分:2)

因为您在堆栈上声明了缓冲区,所以在func1退出后它是 undefined 。但是,如果您将其声明为全局或静态,则其范围不会受限于函数调用,因此您可以继续访问它。只是拥有缓冲区的地址并不会神奇地使其内容有效。

答案 1 :(得分:2)

当你在调试器中说“* buff的值”时,你意识到这只是字符串中的一个字符,对吧?其余的字符在堆栈旁边。

我不打算运行这段代码。这里的其他人都说工作得很好。

答案 2 :(得分:0)

您的代码没问题 - 您如何查看缓冲区的内容?如果您在printf("%s\n", buffer)末尾添加func1(),则会看到它正常运行。

答案 3 :(得分:0)

这里的问题并不明显,但是由于你已经标记了“RTOS”这个问题,这个任务的堆栈是否可能太小而无法容纳128字节的数组?