#include <string.h>
#include <stdio.h>
char *in() {
char a[10];
scanf("%s",a);
return (a);
}
int main () {
char *a; a=in();
printf("\n%s",a);
return (0);
}
答案 0 :(得分:3)
在您的代码中,
return (a);
是尝试返回局部变量的地址。在呼叫者中,地址的任何使用(尝试访问)都将导致undefined behavior,因为内存地址无效。
函数返回后,函数内的局部变量将不复存在,其生命周期到期。因此,与这些变量(对象)对应的地址变为无效。根据{{1}},章节§6.2.4
[...]如果在其生命周期之外引用对象,则行为未定义。当指针指向(或刚刚过去)的对象到达其生命周期的末尾时,指针的值变得不确定。
注意:那就是说,我的个人添加:: C11
是一个关键字,请不要让它看起来像一个函数。
解决方案:您需要确保返回地址的变量的生命周期取代函数范围,这样您就可以
return
和系列来分配内存malloc()
存储的变量。答案 1 :(得分:0)
不要返回局部变量指针。使用全局代替或静态。
char *in() {
static char a[10];
scanf("%s",a);
return (a);
}
int main () {
char *a; a=in();
printf("\n%s",a);
return (0);
}