Język programowania K&R C 1.5.1 (Kopiowanie plików)

Cóż, przeczytałem kilka miesięcy temu kolejną „dobrze znaną” książkę C (w moim języku) i nigdy o tym nie wiem. Sposób, w jaki K&R pisze trzy rozdziały na 20 stronach, jest po prostu niesamowity i oczywiście nie mogę oczekiwać ogromnych wyjaśnień, ale to również rodzi pytania.

Mam pytanie dotyczące tego punktu 1.5.1. Książka mówi (str. 16):

main(){
  int c;// <-- Here is the question
  c=getchar();
  while (c != EOF){
    putchar(c);
    c = getchar();
  }
}

[...] Typ char jest specjalnie przeznaczony do przechowywania takich danych znakowych, ale można użyć dowolnego typu liczby całkowitej. Użyliśmy int dla subtelnego, ale ważnego powodu. Problem polega na odróżnieniu końca danych wejściowych od poprawnych danych. Rozwiązaniem jest to, że getchar zwraca wartość charakterystyczną, gdy nie ma więcej danych wejściowych, wartość, która nie może być połączona z żadnym rzeczywistym znakiem. Ta wartość nazywa się EOF dla „końca pliku”. Musimy zadeklarować, że c jest typem wystarczająco dużym, aby pomieścić dowolną wartość zwracaną przez getchar. Nie możemy używać char, ponieważ c musi być wystarczająco duże, aby pomieścić EOF oprócz każdego możliwego znaku. Dlatego używamy int. [...]

Po przeszukaniu google dla innego wyjaśnienia:

EOF to specjalne makro reprezentujące End of File (Linux: użyj CTRL + d na klawiaturze, aby utworzyć to polecenie Windows: użyj CTRL + z (może być na początku nowej linii, a następnie RETURN)): Często EOF = -1, ale zależy od implementacji. Musi być wartością, która nie jest poprawną wartością dla każdego możliwego znaku. Z tego powodu c jest typu int (nie char jak można się spodziewać).

Więc zmodyfikowałem źródło z int na char, aby zobaczyć, jaki jest problem, o pobieraniu wartości EOF ... ale nie ma problemu. Działa tak samo.

Nie zrozumiałem też, jak getchar bierze każdą postać, którą piszę, i drukuje wszystko. Typ int ma długość 4 bajtów, więc może przyjąć 4 znaki wewnątrz zmiennej. Ale mogę umieścić dowolną liczbę znaków, wszystko będzie czytać i zapisywać w ten sam sposób. I z char, dzieje się tak samo ... Co naprawdę się dzieje? Gdzie przechowywane są wartości, gdy jest więcej niż 1-4 znaków?

questionAnswers(3)

yourAnswerToTheQuestion