这是我正在谈论的功能:
static int getInput()
{
printf("Enter your name: ");
return fgets(input, sizeof(input), stdin) != NULL;
}
这是如何工作的?为什么int返回类型可以使用这样的fgets?
答案 0 :(得分:3)
“ 为什么
int
返回类型函数可以返回字符串?”
实际上,它不能。
让我们仔细看一下这句话:
return fgets(input, sizeof(input), stdin) != NULL;
fgets()
返回指向char
的指针。检查该指针是否为空指针。如果返回的指针是非空指针(1
实际上返回了指向fgets()
的指针),则此布尔表达式的验证要么为input
,要么为0
空指针-表示使用fgets()
消耗输入时发生错误。
然后从函数int
返回此0
值(1
或getInput()
);本身不是指针,也不是按值本身的字符串(就C语法而言,这是不可能的。)
旁注:
input
似乎是一个全局char
数组。避免使用全局数组。它会使您和读者感到困惑。通过引用将指针传递到缓冲区,还通过值传递缓冲区的大小。
static char* getInput (char* buf, size_t len)
{
if ( len > INT_MAX || len < 2 )
{
return NULL;
}
printf("Enter your name: ");
return fgets(buf, len, stdin);
}
并这样称呼它:
char a[20];
if ( getInput(a, sizeof(a)) == NULL )
{
fputs("Error occured at consuming input!", stderr);
}
对于本示例中的static
限定词的含义,请看一下:
答案 1 :(得分:1)
fgets(...) != NULL
这是一个布尔值,布尔值用C表示为整数。
答案 2 :(得分:0)
您的函数将返回true == 1
或false == 0
这不应该返回字符串
答案 3 :(得分:-1)
实际上,OPs函数不会返回char *
指针,但是有可能会返回
int foo(char *c)
{
return (int)c;
}
它将返回转换为int的char指针。如果int足够大以容纳指针,则可以将其转换回指针。
这种转换在微控制器和与硬件相关的底层编程中非常普遍使用(当可移植性无关紧要时)。使用无符号整数(通常为uint64_t
这样的固定大小,以确保它们足够大)来获取,传递和存储地址