注册 登录
编程论坛 C++教室

返回值--警告

九天冥盟 发布于 2018-05-12 17:22, 1550 次点击

代码如下:
struct Stu
{
    char Name[20];
    char ID[20];
    int a;
};

char * GetStudentID(Stu stu)
{

   /*
    char *temp=stu.ID;
    return temp;
   */
  
    return stu.ID;
}

char * GetStudentName(Stu *stu)
{
    return stu->Name;
}
int main()
{
    Stu stu;
    strcpy(stu.ID,"001");
    strcpy(stu.Name,"name");

    if(strcmp(GetStudentID(stu),"000")==0)
        cout<<"yes"<<endl;
    else
        cout<<"no"<<endl;
    return 0;
}

编译就会出现警告:[Warning] address of local variable 'stu' returned [-Wreturn-local-addr]

如果是红色部分
为函数GetStudentID的实现部分,就没有警告;
为什么会出现这种情况;最好解释一下,谢谢!!

4 回复
#2
Jonny02012018-05-13 10:50
因为你其中一个函数里面传的是结构体指针,另一个不是
这部分的标准我也不太懂
另外,C++ 里推荐用 string 替代 char 数组
#3
九天冥盟2018-05-14 14:05
回复 2楼 Jonny0201
不是GetStudentName函数所发出的警告
#4
rjsp2018-05-14 14:34
反正都是错误
一个因为比较简单清晰,所以编译器给出了警告;另一个复杂些,把编译器糊弄过去了,编译本来也没义务必须给出警告
#5
lin51616782018-05-14 17:33
同意 4楼的意见
解释一下为什么是错误
这是一个生存期的问题
形参stu的生存期只再函数内部
函数GetStudentID结束的时候
stu生存期结束 stu会被销毁
数组stu.ID也被销毁
你返回的指针变成野指针
所以说都是错的
1