如何检查 EOF 是否在 C 中的 getline() 函数中首先出现?

How to check if EOF comes first in getline() function in C?

我有这个代码:

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 显示 Conditional jump or move depends on uninitialised value(s)。我知道问题一定是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;
}