【发布时间】:2014-02-22 01:22:49
【问题描述】:
char *userinput(void){
char input[22];
fgets(input,22,stdin);
char *inputpoint;
inputpoint=input;
return inputpoint;
}
这个函数应该简单地接收用户输入的字符串并返回它。 我在main中调用函数如下
float arrests;
float money;
//print menu
menuprint();
//Take first User input
char *inputpoint;
inputpoint=userinput();
char input[22];
input=inputpoint;
printf("\nYou entered: %s\n",input);
return 0;
}
我对编码尤其是指针比较陌生。我不知道为什么这段代码没有打印出输入的字符串。请帮忙
【问题讨论】:
-
input被分配在userinputs 堆栈上,所以当它被返回(并且堆栈帧被展开)时,你只会得到一个指向垃圾的指针。 -
一旦
userinput退出,其中的所有自动变量都不再可寻址。现在考虑那个函数返回,然后重读我的第一句话。一旦函数存在,返回的地址是不确定的,因此任何对它的使用都是未定义的行为。 -
返回到 main 的指针可能仍在边界内并指向堆栈上的 something,但谁知道它实际指向的是什么 (可能在 printf 的堆栈中)。我们甚至不会讨论 input=inputpoint 的愚蠢之处......您正在尝试覆盖应该是只读指针的内容,而不是将字符串传输到 inputl。
标签: c arrays string function pointers