如何在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()
。是的。我的错。修好了。谢谢。非常感谢你们的快速回答。谢谢。