c - C 中函数调用指针的问题

标签 c arrays string function pointers

 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/

相关文章:

c - 两个数组相加并检查是否溢出

string - 如何获取字符串的最后 4 个字符?

c# - 如何管理在 C#/WPF 中看起来相似的本地化字符串?

c - 将字符串文字视为常量

C-错误 : request for member ‘---’ in something not a structure or union

c - tcc 中的打包结构

java - Java 中的数组按降序逆序排列

c - unsigned short 与 unsigned int - 有时它们的范围相同?

javascript - 将分组对象数组平均分成两部分

c - fgets 在用户输入中引入新行