如何检查 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;
}
我有这个代码:
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;
}