K & R C Programming Language 1.5.1 (Kopieren von Dateien)

Nun, ich habe vor einigen Monaten ein anderes "gut bekanntes" C-Buch (in meiner Sprache) gelesen, und ich habe nie nichts darüber gelernt. Die Art und Weise, wie K & R 3 Kapitel auf 20 Seiten schreibt, ist einfach unglaublich und natürlich kann ich keine großen Erklärungen erwarten, aber das wirft auch Fragen auf.

Ich habe eine Frage zu diesem Punkt 1.5.1 Das Buch sagt (Seite 16):

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

[...] Der Typ char ist speziell zum Speichern solcher Zeichendaten gedacht, es kann jedoch jeder ganzzahlige Typ verwendet werden. Wir haben int aus einem subtilen, aber wichtigen Grund verwendet. Das Problem besteht darin, das Ende der Eingabe von gültigen Daten zu unterscheiden. Die Lösung besteht darin, dass getchar einen eindeutigen Wert zurückgibt, wenn keine Eingabe mehr vorhanden ist. Dieser Wert kann nicht mit einem echten Zeichen verwechselt werden. Dieser Wert wird als EOF für "Dateiende" bezeichnet. Wir müssen erklären, dass c ein Typ ist, der groß genug ist, um jeden Wert aufzunehmen, den getchar zurückgibt. Wir können char nicht verwenden, da c groß genug sein muss, um EOF zusätzlich zu möglichem char aufzunehmen. Deshalb verwenden wir int. [...]

Nachdem Sie google nach einer anderen Erklärung durchsucht haben:

EOF ist ein spezielles Makro für End Of File (Linux: Verwenden Sie STRG + d auf der Tastatur, um dies zu erstellen. Windows-Befehl: Verwenden Sie STRG + z (muss möglicherweise am Anfang einer neuen Zeile stehen, gefolgt von RETURN)): Oft EOF = -1, aber implementierungsabhängig. Muss ein Wert sein, der kein gültiger Wert für ein mögliches Zeichen ist. Aus diesem Grund ist c vom Typ int (nicht char wie erwartet).

Also habe ich den Quellcode von int auf char geändert, um zu sehen, was das Problem ist, wie man EOF-Werte nimmt ... aber es gibt kein Problem. Funktioniert genauso.

Ich habe auch nicht unterschätzt, wie getchar jedes Zeichen, das ich schreibe, nimmt und alles druckt. Der Int-Typ ist 4 Byte lang, daher kann er 4 Zeichen in einer Variablen enthalten. Aber ich kann eine beliebige Anzahl von Zeichen eingeben, es wird alles auf die gleiche Weise gelesen und geschrieben. Und mit char passiert dasselbe ... Was passiert wirklich? Wo werden die Werte gespeichert, wenn mehr als 1-4 Zeichen vorhanden sind?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage