【发布时间】:2013-02-07 19:55:43
【问题描述】:
我试图将字符 array 值传递给字符 pointer。然后这个值被返回给调用它的方法,但是在它被返回之后,这个值就变成了垃圾。谁能帮帮我?
#include <stdio.h>
const char * getname(){
char nam[10];
char * name;
gets(nam);
name = nam;
return name;
}
main(){
printf("%s",getname());
getch();
}
一切都很好,直到字符串被返回
【问题讨论】:
-
停止返回被调用函数中局部变量的地址。你正在做的是未定义的行为。并使用
fgets()而不是gets()。该功能太糟糕了,在 C11 中被彻底淘汰,在 C99 中已弃用。 -
我希望这个问题很容易搜索,对于初学者来说很常见。另外,OP,您不需要指针变量。数组在必要时衰减为指向第一个元素的指针,您可能只是(仍然不正确地)编写:
return nam; -
我们还要记住
gets()是那些没有缓冲区溢出保护的危险函数之一。你最好使用fgets(),比如stackoverflow.com/questions/4023895/…。