Was könnte an diesem Programm falsch sein?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Es ist kein Fehler, wenn read() 0 zurückgibt: Wenn das Betriebssystem noch dabei ist, den nächsten Sektor von der Platte zu holen, wartet read() nicht darauf.

Du musst das Dateiende explizit prüfen. Mit fopen() und fread() sollte es leichter gehen, und Du brauchst den Fall stdin nicht extra programmieren.


guterfrager5 
Fragesteller
 10.05.2023, 08:40

Danke damit hat es funktioniert! Und sieht auch noch wesentlich kürzer/einfacher/verständlicher aus:

#include <stdio.h>

int main (int argc, char** argv)
{
    FILE* f = argc > 1 ? fopen(argv[argc - 1], "rb") : NULL;
    if (f == NULL) f = stdin;

    char ch;
    while (fread(&ch, 1, 1, f)) printf("%02X ", ch & 0xFF);
    fclose(f);
    
    return 0;
}
0

HAllo,

Sehe ich das richtig oder überliest du Character die hex Null sind und gibst nichts aus?

Bei vielen Nullwerten kommst du dann ja lange nicht an die ANzahl vorhandener Zeichen heran bei der AUsgabe.

LG

Harry