C - 将指针传递给函数

时间:2017-11-27 10:15:37

标签: c pointers gcc

有人可以告诉我为什么这段代码不起作用?我尝试使用gcc 6.3编译并运行它,但printf的结果是一种内存混乱:“P @”而不是“某事”。在https://www.jdoodle.com/c-online-compiler上用gcc 5.3编译它,给出了确切的结果(“某事”)。

#include <stdio.h>

char *vari;

void foo(char **ts)
{
    char buffer[] = "something";
    *ts = &buffer[0];
}

int main (void)
{
    foo(&vari);
    printf("vari: %s\n", vari);
}

2 个答案:

答案 0 :(得分:3)

buffer[] 自动存储时间

使用在该函数调用者中设置为其地址的指针将导致未定义的行为。

如果你写了

,那将是另一回事
static const char* buffer = "something";

代替。

答案 1 :(得分:2)

这是未定义的行为。访问其范围之外的自动存储生命周期元素可能会导致任何

foo()函数结束时,buffer的内存被释放。

您可以通过不同的方式解决问题

  • 设置buffer静态存储时间。

  • 分配内存,然后将文字"somehting"复制到其中,并将其分配给*ts