Я только что узнал, что получение устарело, а scanf не рекомендуется из-за проблем с надежностью, поэтому я пытаюсь getline().size_t cast in getline in C
Я могу использовать getline без проблем, если объявить переменную size_t и присвоить ей количество используемых байтов.
Я понимаю, что если я хочу getline для memalloc для меня, я должен присвоить второй параметр (size_t * one) равным нулю, а char ** - NULL. И это работает:
int main(){
int read;
size_t zero = 0;
char *A;
A=NULL;
printf("Write something:\n");
read=getline(&A, &zero, stdin);
if(read!= -1) puts(A);
return 0;
}
Это работает, если я назначу ноль в переменной, но почему я не могу просто не объявить переменную и отбрасывать ноль (0), как это:
int main(){
int read;
//size_t zero = 0;
char *A;
A=NULL;
printf("Write something:\n");
read=getline(&A, (size_t *)0, stdin);
if(read!= -1) puts(A);
return 0;
}
Страшного код компилируется отлично, но getline возвращает -1, поэтому ошибка.
Максимальная длина использования (в хорошей версии) равна 0, поэтому никакие символы (символы) не будут прочитаны. – user3629249