【发布时间】:2015-09-07 06:23:42
【问题描述】:
如何返回一个 int 的局部变量,但 char 没有? 代码sn-p
int myfn1() {
int i=10;
return i;
}
char myfn2() {
char buf[10]="Hello";
return buf;
}
int main(){
printf("%d\n", myfn1());
printf("%s\n", myfn2());
}
输出:
10
Segmentation fault
我是 C 编程新手,我知道局部变量的范围在该函数内,myfn2 崩溃对我来说是有意义的,但 myfn1 是如何工作的?
【问题讨论】:
-
buf似乎既不是局部变量也不是char。是否可能缺少一些位? -
你没有返回一个字符。
buf不是char。 -
我认为你应该停下来研究一下指针及其与字符串/数组的关系(注意我没有说字符)。
-
myFn1正在返回i的 值。所以它有效。 (i正在底层程序集中的返回寄存器中返回。)您的myfn2有一个char []代表buf(不是char!)和return buf返回buf的地址,它是临时(在myfn2的堆栈上)。所以myfn2返回后,buf的地址就不再有效了。即使myfn2返回值被正确声明也是如此。 -
注意编译器错误/警告,它应该指出了
myfn2的问题。 (如果没有,请调高错误级别)。