【发布时间】:2017-11-27 10:15:37
【问题描述】:
谁能告诉我为什么这段代码不起作用?我尝试使用 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);
}
【问题讨论】:
-
未定义行为,一旦您离开
foo(),buffer将不再存在。 -
重复链接 1:为什么这不起作用。重复链接 2:为什么即使它“似乎有效”也不能依赖它。重复链接 3:如果您将其声明为指针,为什么它会起作用。