Язык программирования K & R C 1.5.1 (копирование файлов)
Ну, я прочитал несколько месяцев назад другой "хорошо знаю" C книга (на моем языке), и я никогда ничего не узнаю об этом. Способ, которым K & amp; R пишет 3 главы на 20 страницах, просто поразителен, и, конечно, я не могу ожидать огромных объяснений, но это также вызывает вопросы.
У меня есть вопрос об этом пункте 1.5.1 Книга говорит (стр. 16):
main(){
int c;// <-- Here is the question
c=getchar();
while (c != EOF){
putchar(c);
c = getchar();
}
}
[...] The type char is specifically meant for storing such character data, but any integer type can be used. We used int for a subtle but important reason. The problem is distinguishing the end of input from valid data. The solution is that getchar returns a distinctive value when there is no more input, a value that cannot be cinfused with any real character. This value is called EOF, for "end of file". We must declare c to be a type big enought to hold any value that getchar returns. We can't use char since c must be big enough to hold EOF in addition to any possible char. Therefore we use int.[...]
После поиска в Google для другого объяснения:
EOF is a special macro representing End Of File (Linux: use CTRL+d on the keyboard to create this, Windows command: use CTRL+z (may have to be at beginning of new line, followed by RETURN)): Often EOF = -1, but implementation dependent. Must be a value that is not a valid value for any possible character. For this reason, c is of type int (not char as one may have expected).
Поэтому я изменил исходный код с int на char, чтобы увидеть, в чем проблема, принимая значения EOF ... но проблем нет. Работает так же.
Я также не понял, как getchar берет каждый написанный мной символ и печатает все. Тип Int имеет длину 4 байта, поэтому он может содержать 4 символа внутри переменной. Но я могу поставить любое количество символов, он будет читать и писать все одинаково. И с char происходит то же самое ... Что на самом деле происходит? Где хранятся значения, если их больше 1-4 символов?