我正在学习C语言编程,并使用Geany在Ubuntu中进行一些测试。我有一个关于指针的问题。当数组在函数中声明,然后作为指针返回时,数组值在主方法中丢失。我可以用一个简单的例子来检查一下:
#include <stdio.h>
char* msg ();
int main(int argc, char **argv)
{
char* p = msg();
int i;
for(i=0;i<=10;i++)
printf("i: %d, value: %c n", i, p[i]);
return 0;
}
char* msg (){
char msg [] = "hello";
return msg;
}
输出是随机值(第一个总是"h"的值除外)。我想这是因为指针超出了范围,内存可以由其他函数写入。
但是,如果消息的值足够大(例如,数千个字符或更少),则值位于相同的内存位置,尽管数组是在其他函数中创建的,但我可以读取它们。
产生这种结果的原因是什么?
非常感谢。
返回指向automatic
局部变量的指针会调用未定义的行为。