【问题标题】:Program error in c - explanation [duplicate]c中的程序错误-解释[重复]
【发布时间】: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


【解决方案1】:

为什么代码中会有“此程序出现严重错误”的注释?

因为您要返回一个本地字符串 char nstring[25];,其范围和寿命仅限于未定义行为的特定函数

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    相关资源
    最近更新 更多