C 如何从fgets中检测空字符串

C 如何从fgets中检测空字符串,c,input,fgets,C,Input,Fgets,我试图检测stdin中fgets的输入是否为空(当我按enter键而不输入任何内容时)。这是我的节目: int main() { char input[1000]; printf("Enter :"); fgets(input, 1000, stdin); input[strlen(input) - 1] = '\0'; if(input != '\0'){ printf("hi"); } return 0; } 我

我试图检测stdin中fgets的输入是否为空(当我按enter键而不输入任何内容时)。这是我的节目:

int main()
{
    char input[1000];
    printf("Enter :");
    fgets(input, 1000, stdin);
    input[strlen(input) - 1] = '\0';

    if(input != '\0'){
        printf("hi");
    }

    return 0;

}
我想做一些条件,使它不打印任何东西,但显然这种方式是不正确的。我还尝试了NULL,但无效


谢谢

我认为这是最具可读性(但不是最好的):

但为了教学,这里是你的风格,但随后固定:

if (input[0] != '\0') {
    printf("hi");
}

为什么
输入[0]
?因为
input
的作用类似于指向数组第一个元素的指针,如果您这样比较它,那么首先必须取消对它的引用以使比较有用。

显而易见的方法是:

if (input[0] != '\0')
   printf("hi");

虽然使用strlen可以工作,但它可能相当浪费——它会将O(1)操作变成O(N)。

fgets会在按下返回键时返回“\N”;这将使总字符串为“\n\0”。您可以使用此值进行字符串比较,但更可靠的解决方案是“去除”或“修剪”字符串以删除所有前导和尾随空格(在任何处理之前都应该这样做),然后检查空字符串


最简单的修改是检查
(*input!='\n')
。我应该注意到,这还要求您删除空终止代码,这会去掉这条换行符(大概是设计上的)。

为了安全起见,最好使用以下代码:

if(u_input[0] == '\n' && u_input[1] == '\0'){
    printf("hi");
}

+1,但
input
是一个数组,而不是指向数组的指针。在比较的上下文中,它确实会衰减为指针,但是区分是很重要的。是的,但是您编辑了相同(错误)的语句。数组和指针不是一回事,即使它们在这种特定情况下可以互换使用。“数组是指针,如果你这样对待它们”不,数组可以用作指针,但这并不意味着它是指针。@JamesMcNellis事实上,这行永远不会做任何事情,无论
输入来自何处。
strlen
函数只搜索字符串中的第一个
'\0'
,因此根据定义
input[strlen(input)-1]='\0'
。如果
输入
不是以null结尾的,并且在程序的地址空间用完之前没有紧跟任何
'\0'
,那么它唯一可以改变的就是引入segfault。
if(u_input[0] == '\n' && u_input[1] == '\0'){
    printf("hi");
}