如何在C的getline()函数中检查EOF是否排在第一位?

如何在C的getline()函数中检查EOF是否排在第一位?,c,char,eof,getline,strlen,C,Char,Eof,Getline,Strlen,我有以下代码: int main(void){ printf("Type something:\n"); while(1){ char * array = NULL; size_t size = 0; getline(&array, &size, stdin); if( (strlen(array) == 0) && feof(stdin) ){ free(array);

我有以下代码:

int main(void){

  printf("Type something:\n");
  while(1){
    char * array = NULL;
    size_t size = 0;
    
    getline(&array, &size, stdin);

    if( (strlen(array) == 0) && feof(stdin) ){
      free(array);
      return 0;
    };
    
    /* do something else */
    free(array);
  }

  return 0;
}
当输入的第一件事是EOF时,我想结束我的程序,但valgrind显示
条件跳转或移动取决于未初始化的值
。我知道问题一定是strlen(array),但不知道如何用不同的方法解决。我可以做到:

if(feof(stdin)){
  free(array);
  return 0;
}

但是,如果有人键入一个字符串,然后以EOF结束它,我的程序也会停止,我不希望这样(因为我需要用这个字符串做其他事情)。有什么建议吗?我是C语言的初学者。

正如@wildplasser所建议的,使用以下代码

int main(void){

  printf("Type something:\n");
  while(1){
    char * array = NULL;
    size_t size = 0;
    
    ssize_t read = getline(&array, &size, stdin);

    if((read < 0 || (strlen(array) == 0)) && feof(stdin) ){
      free(array);
      return 0;
    };
    
    /* do something else */
    free(array);
  }

  return 0;
}

int main(无效){
printf(“键入内容:\n”);
而(1){
char*array=NULL;
大小\u t大小=0;
ssize_t read=getline(&array,&size,stdin);
if((读取<0 | |(strlen(数组)==0))和&feof(stdin)){
自由(数组);
返回0;
};
/*做点别的*/
自由(数组);
}
返回0;
}

Getline()返回一个值(ssize\t)。使用它。如果它得到EOF,它将不会更新
数组
。它仍然是
NULL
,您不能调用
strlen()
。是的。我的错。修好了。谢谢。非常感谢你们的快速回答。谢谢。