提问人:Martin Tam 提问时间:11/21/2020 更新时间:11/21/2020 访问量:438
如何检查 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语言的初学者。
答:
0赞
Abhijit Mondal
11/21/2020
#1
按照@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;
}
评论
0赞
Abhijit Mondal
11/21/2020
是的。我的错。修复了它。谢谢。
0赞
Martin Tam
11/21/2020
非常感谢你们的快速回答。欣赏它。
评论
array
NULL
strlen()