【发布时间】:2016-12-20 17:52:06
【问题描述】:
我有一个问题要问你。我正在阅读一些关于 c 中的指针和内存分配的信息,我看到一个小程序在运行时会产生错误:
#include <stdio.h>
char* getname(void){
char nstring[25];
printf("Please type your name");
gets(nstring);
putchar('\n')
return nstring; //Serious error in this program
}
int main(void){
char* myname;
myname = getname();
printf("%n\n", myname);
return 0;
}
为什么代码中有一条注释说“这个程序出现严重错误”?我不明白错误发生在哪里。谁能给我解释一下?
【问题讨论】:
-
在对象生命周期结束后访问对象的未定义行为。在指针指向的对象的生命周期结束后使用指针的值的未定义行为。
-
永远不要使用
gets。这是危险的,迟早会导致坏事发生。自 C99 标准以来,它也已被弃用,并在 C11 标准中完全删除。请改用fgets。
标签: c pointers memory-management