【发布时间】:2021-03-04 16:35:27
【问题描述】:
我有这个代码:
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 语言的初学者。
【问题讨论】:
-
Getline() 返回一个值(a ssize_t)。使用它。
-
如果它获得 EOF,它将不会更新
array。仍然是NULL,你不能打电话给strlen()。