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;
}
我对编码尤其是指针比较陌生。我不知道为什么这段代码没有打印出输入的字符串。请帮忙
最佳答案
您没有说明您遇到的实际问题,但在这种情况下,情况很清楚。如果您在编译器上启用了警告,它应该告诉您正在返回局部变量的地址。这是未定义的行为,您不允许这样做。
这里有两种常见的方法。一种是通过将其作为函数参数传递来提供位置:
void userinput( char input[22] )
{
fgets(input, 22, stdin);
}
另一种是动态分配。在这种情况下,您可以按当前方式声明函数,但执行 malloc
,或者仅使用 strdup
:
char *userinput(void)
{
char input[22];
fgets(input, 22, stdin);
return strdup(input);
}
请注意,如果您使用动态内存,则需要在使用完毕后对其进行清理:
char *inputpoint = userinput();
printf("\nYou entered: %s\n", inputpoint);
free(inputpoint);
<小时/>
现在我注意到另一个问题:
input = inputpoint;
上面是分配一个指向数组的指针。这是不合法的,你的编译器应该发出错误。显然您想要复制该字符串。您可以使用 strncpy
来实现:
strncpy( input, inputpoint, 22 );
关于c - C 中函数调用指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21444659/