PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: Einlesen einer Textdatei


Gast
2007-09-24, 10:43:40
Morgen !

Ich bin Anfänger was C angeht und soll nun im Zuge meines Praktikums folgendes anstellen:

#include <stdio.h>

void receive_frame() {
/* naechstes Zeichen von STDIN holen */
/* wenn != '>', dann Abbruch/Fehler */
/* Rest der Zeile von STDIN einlesen und in framebuffer schreiben */
}

Wie genau muss ich den Kommentar in der Funktion verstehn mit STDIN und '>' usw. ?
Mit dieser Funktion soll aus einer Datei "test.txt" in etwa so etwas eingelesen werden:

> 0A 00 00 A4 00 00 00

Ich hab mich schon dumm und dämlich gesucht aber bin entweder blind oder nicht mit dem Talent gesegnet, das Wichtige aus der Masse rauszusuchen. Von den Suchergebnissen wurde ich komplett erschlagen und nur noch mehr verwirrt.

Ich wäre euch sehr dankbar für Tips :)

Gast
2007-09-24, 10:53:38
Achja, mir wurde noch der Hinweis gegeben, dass ich alles mit stdio machen und alle windows-eigenen libs usw. weglassen soll. Als IDE verwende ich Code::Blocks (mit mingw), Visual Studio 2005 steht auch zur Verfügung.

rotalever
2007-09-24, 11:14:50
Man kann mit < und > in einer entsprechenden Konsole Datenströme umleiten. Beispielsweise eine Datei mit < in das Programm leiten, oder die Ausgabe mit > in eine Datei umlenken.

Gast
2007-09-24, 11:20:18
Entsprechende Konsole ? Ohweh, ich vermute langsam, dass der nette Herr Aufgabensteller unter Linux programmiert, nur erreicht man den sehr schwer, da ich nicht im Hauptsitz der Firma arbeite. Kann ich das irgendwie auch unter Windows bewerkstelligen ?

hadez16
2007-09-24, 12:34:41
Man kann mit < und > in einer entsprechenden Konsole Datenströme umleiten. Beispielsweise eine Datei mit < in das Programm leiten, oder die Ausgabe mit > in eine Datei umlenken.

ehm also so ist das nicht gemeint denke ich

er soll einfach aufhören was aus einer datei zu lesen wenn das zeichen ">" auftaucht


/* wenn != '>', dann Abbruch/Fehler */


also wenn das nächste zeichen ein ">" ist, dann abbruch

zu deinem problem

http://www.cplusplus.com/reference/clibrary/cstdio/

fopen, fgetc, usw...

http://www.cppreference.com/stdio/index.html

rotalever
2007-09-24, 12:43:26
ehm also so ist das nicht gemeint denke ich

er soll einfach aufhören was aus einer datei zu lesen wenn das zeichen ">" auftaucht


Ja klingt logisch :redface:

EcHo
2007-09-24, 13:25:19
Ich lese das so:

Beim Aufurf von der Methode "receive_frame()":
1.) Hole das erste Zeichen von der STDIN.
2.) Wenn das erste Zeichen KEIN ">" ist, breche ab oder gebe Fehlermeldung
3.) Lese den Rest er Zeile.

Mögliche Datei:

>Zeile 1 Zeile 1 Zeile 1
>Zeile 2 Zeile 2 Zeile 2
>Zeile 3 Zeile 3 Zeile 3
hier abbruch



p.s.: Konsole hat nichts mit Linux zu tun....

Gast
2007-09-24, 13:47:25
Ich lese das so:

Beim Aufurf von der Methode "receive_frame()":
1.) Hole das erste Zeichen von der STDIN.
2.) Wenn das erste Zeichen KEIN ">" ist, breche ab oder gebe Fehlermeldung
3.) Lese den Rest er Zeile.

Mögliche Datei:

>Zeile 1 Zeile 1 Zeile 1
>Zeile 2 Zeile 2 Zeile 2
>Zeile 3 Zeile 3 Zeile 3
hier abbruch


Das is schon klar, ich hab mich vieleicht etwas blöd ausgedrückt :)

Die Frage ist, wie ich das implementiere !? Wenn ich mir die Tutorials anschaue, krieg ich nur noch mehr die Krise weil sich dann wieder tausend Fragen auftun. Ich bin grad aber mal sowas von planlos...

Gast
2007-09-24, 16:44:36
Das is schon klar, ich hab mich vieleicht etwas blöd ausgedrückt :)

Die Frage ist, wie ich das implementiere !? Wenn ich mir die Tutorials anschaue, krieg ich nur noch mehr die Krise weil sich dann wieder tausend Fragen auftun. Ich bin grad aber mal sowas von planlos...

Also die Zeile einlesen klappt jetzt schonmal, nur ein Problem gibt es noch:

unsigned char buffer[254];
int i, ch;
FILE* testfile;

// Read a single line from the file "test.txt".

fopen_s(&testfile, "test.txt", "r");
if (!testfile)
{
printf("Failed to open file test.txt\n");
exit(1);
}

for (i = 0; (i < sizeof(buffer)-1) && ((ch = getc(testfile)) != EOF)
&& (ch != '\n'); i++)
{
buffer[i] = (char) ch;
}

// Terminate string with a null character
buffer[i] = '\0';
printf("Input was: %s\n", buffer);

fclose(testfile);

Visual Studio frisst das ganze ohne zu meckern, Code::Blocks mit MinGW dagegen mosert irgendwas vonwegen " undefined reference to `fopen_s' ". Was kann das sein ?

EcHo
2007-09-24, 16:54:15
fopen_s gehört nicht zum standardumfang von c++, das hat MS dazu gestrickt. Nimm fopen.

PHuV
2007-09-24, 17:21:43
fopen_s gehört nicht zum standardumfang von c++, das hat MS dazu gestrickt. Nimm fopen.


Korrekt, vor allen Dingen ist so ein Code nicht portable (Unix, Linux etc.).

Dann ganz gefährlich


&& (ch != '\n'); i++)


Denke dran, daß unter Windows der Zeilentrenner 0d0a und unter AppleOs 0d!
Weiter ganz übler Fehler, wo hast Du den buffer initialisiert? Und dann eine feste Festlegung auf 256? Böse böse ;) .

Was machst Du, wenn eine Zeile länger als 256 Bytes ist?

Gast
2007-09-24, 18:07:06
Leute, seid nicht so harsch mit mir :D
Ich hab doch sogut wie kein Plan von garnix und hab den Code mehr oder weniger aus der Visual Studio Hilfe abgekupfert. Aber danke für die Hinweise, wenn man es lernt dann am besten gleich richtig :)

Gnafoo
2007-09-24, 18:26:25
Ich mache es mal etwas ausführlicher, weil ich das Gefühl habe, du hängst dich gerade am STDIN etwas auf.

Ein- und Ausgabe wird mit sog. Streams gemacht, in die man hineinschreibt, oder aus denen man etwas liest. Z. B. kann eine Datei ein Stream sein, oder auch die Ausgabe auf deiner Konsole. Jetzt gibt es dementsprechend einige spezielle Streams, nämlich STDIN, STDOUT und STDERR. Aus STDIN kannst du Tastatureingaben aus der Konsole (Eingabeaufforderung) lesen. In STDOUT kannst du Meldungen auf die Konsole schreiben. In STDERR entsprechend Fehlermeldungen (der Unterschied ist erstmal nicht so wichtig).

Das geht z. B. mit der Funktion fprintf. „fprintf(stdout, "%i", 5);“ schreibt beispielsweise eine 5 auf die Konsole. Damit man das stdout nicht immer schreiben muss, gibt es auch printf. Das funktioniert genauso, benutzt aber immer stdout.

In deinem Fall heißt das:

/* naechstes Zeichen von STDIN holen */
Heißt: Ein „eingegebenes“ Zeichen lesen.

/* wenn != '>', dann Abbruch/Fehler */
Heißt: Ist dieses Zeichen '>' (d. h. wurde '>' gedrückt), dann beende das Programm (und gib eine Meldung aus).

/* Rest der Zeile von STDIN einlesen und in framebuffer schreiben */
Heißt: Lese dann weiter die Eingabe, bis die Zeile zu Ende ist. Gib diese dann aus. (Zumindest nehme ich an, das das mit der Ausgabe auf dem Framebuffer gemeint ist).

Man kann in der Konsole (Eingabeaufforderung) auch eine Datei in den STDIN eines Programmes umleiten, indem man dieses wie folgt startet:


Programm < Datei.txt


Liest man dann vom STDIN (was normalerweise nur Tastatureingaben sind), so liest man nicht von der Tastatur, sondern aus der Datei. Ebenso kann man die Ausgabe eines Programmes in eine Datei umleiten. Deshalb gibt es auch die Unterscheidung zwischen STDOUT und STDERR, damit man Hinweise und Fehlermeldungen getrennt weiterleiten kann.

PS: kleine Feinheiten was die Umleitungsschreibweise, oder das fprintf(stdout,...) angeht, möge man mir bitte verzeihen. Habe (a) schon lange nicht mehr mit purem C gearbeitet und (b) unter Windows kaum die Umleitung in der Konsole benötigt.

Gast
2007-09-24, 18:38:35
Du hast in der Tat Recht, ich häng mich da ziemlich auf :)

Das mit dem "Programm < Datei.txt" hab ich jetzt auch schon öfters gefunden, ganz raffen tu ich das aber nicht.
Wie bau ich das in mein Programm ein bzw. was muss ich für "Programm" reinschreiben ?
Mir dünkt, dass ich da irgendwie noch allgemein was nicht versteh...wie auch :)

Gnafoo
2007-09-24, 18:47:35
Wie bau ich das in mein Programm ein bzw. was muss ich für "Programm" reinschreiben ?

Das hat gar nichts mit dem Quellcode deines Programmes zu tun, sondern damit, wie du das Programm aus der Eingabeaufforderung heraus aufrufst. Rufst du es ganz normal, durch Eingabe der EXE-Datei auf, dann liest es von der Tastatur. Rufst du es eben noch mit dem "< Datei" dahinter auf, liest es stattdessen aus der Datei.

Gast
2007-09-24, 18:59:48
Aber das Programm muss doch irgendwie wissen, dass jetzt durch "< test.txt" irgendwas reinkommt ? Normal schreibt man ja z.B. wenn man auf eine Tastatureingabe wartet scanf oder cin oder ähnliches. Wie würde das in meinem Fall aussehn ?

PHuV
2007-09-24, 19:09:27
Du brauchst keine Pipeumlenkung, wenn Du nur eine Textdatei auslesen möchtest.

Du machst einfach

FILE *datei

datei = fopen ("meinedatei.txt" , "r");

dann eine beliebige Funktion

fread(
fgets(

am Ende ein

fclose(datei);

Und das wars, nix Pipe. Du solltest Dir auch überlegen, was Du mit diesen Daten machen möchtest. Ein zeilenweises Auslesen hat gewisse Vorteile für die Verarbeitung.

Ansonsten hier mal ein Onlinebuch

http://www.galileo-press.de/openbook/c_von_a_bis_z/

Aber das Programm muss doch irgendwie wissen, dass jetzt durch "< test.txt" irgendwas reinkommt ? Normal schreibt man ja z.B. wenn man auf eine Tastatureingabe wartet scanf oder cin oder ähnliches. Wie würde das in meinem Fall aussehn ?

Das kommt auf Deine Aufgabenstellung an. Was willst Du den genau tun? Für das Auslesen einer Datei solltest Du den Dateinamen als Argument direkt dem Programm übergeben, wozu auf etwas warten? Sonst steuerst Du alles über das Programm selbst.

Gnafoo
2007-09-24, 19:53:49
Aber das Programm muss doch irgendwie wissen, dass jetzt durch "< test.txt" irgendwas reinkommt ? Normal schreibt man ja z.B. wenn man auf eine Tastatureingabe wartet scanf oder cin oder ähnliches. Wie würde das in meinem Fall aussehn ?
Vollkommen identisch. Bloß dass scanf, cin etc. wenn man das Programm so aufruft nicht von der Tastatur, sondern aus der Datei lesen. Für das Programm selber sieht aber beides absolut gleich aus. Die Funktionen lesen alle aus STDIN, bloß das Betriebssystem ändert die Rolle, die STDIN spielt, bevor das Programm gestartet wird.

Du brauchst keine Pipeumlenkung, wenn Du nur eine Textdatei auslesen möchtest. [...]
Das ist sicher richtig, aber die Aufgabenstellung vom Eingangsposting sagt klar, dass die Daten von STDIN gelesen werden sollen (was ich persönlich auch etwas umständlich finde), daher habe ich mich in meinen Antworten daran orientiert. Wie eng man das zu verstehen hat, muss natürlich der Threadstarter beurteilen, von daher ist der Hinweis sicher nicht falsch.

Gast
2007-09-24, 20:11:14
Was das Programm jetzt im Endeffekt tun soll, weiß ich selber noch nicht so genau bzw. ich versteh den "Vorbau", den mir einer der Entwickler gegeben hat noch nicht ganz. Diese Funktion ist ja nur ein kleiner Teil. Erschwerend kommt wie bereits erwähnt hinzu, dass ich nicht in der eigentlichen Entwicklungsabteilung arbeite und ich auch nicht permanent die entsprechenden Leute anrufen kann, die haben weiß Gott genügend Arbeit.

Mein Problem ist allgemein, dass ich im 1. und 2. Semester C bzw. C++ "gelernt" habe, das allerdings nur mit mehr oder weniger sinnfreien Konsolenprogrämmchen wie z.B. nem Flaschenautomaten oder so. Damit hatte ich auch keine größeren Probleme. Jetzt bin ich im 5. Semester (Praxissemester) und muss quasi wieder von vorne anfangen. Nebenher hat mir einfach die Zeit und auch die Lust gefehlt, mich daheim mehr mit Programmierung zu beschäftigen, da ich neben dem Studium zum Ausgleich einfach zu viele andere Hobbys habe, wirklich studien -bzw. rechnerbezogene Dinge gehören leider nicht dazu. Im Nachhinein bereu ich das auch sehr aber hinterher is man immer schlauer...
Jetzt hab ich durch das Praktikum die Möglichkeit, mich zum Programmieren zu zwingen. Ich weiß, es klingt ziemlich bescheuert und lässt einen eigentlich vermuten, dass ich wohl das falsche Studienfach gewählt hab. Einige von euch haben das sicherlich auch irgendwann mal an sich festgestellt :)
Ich möchte es nun aber tiefergehend bzw. an einem diesmal wirklich praxisbezogenem Thema lernen. Ich hab meinen Chef auch darüber in Kenntnis gesetzt, dass ich von "ernsthafter" Programmierung so gut wie kein Plan hab. Er hat da aber ganz cool reagiert und meinte, dass ein Praktikum eben dazu da sei und ich mir keine Sorgen machen müsse bzw. nicht zu viel von mir selbst erwarten soll.
Es ist einfach dieses erstmalige Erschlagenwerden, wenn man ein Projekt vorgesetzt bekommt. Naja, ich hab ja noch das ganze Wintersemester Zeit :)

Nun aber Schluss mit den Nebensächlichkeiten, ich werd wenn möglich morgen nochmal mit dem Entwickler telefonieren und mich dann hier wieder melden.

Ich hoffe, dass ihr dann ein wenig Geduld mit mir habt und weiterhin auf meine zum Teil konfusen Fragen eingeht :D

PHuV
2007-09-24, 23:32:06
Ich kann nur aus meiner Erfahrung sprechen, Programmierung lernt man nur dann effizient und praktisch richtig, wenn damit arbeiten muß. Alles theoretisieren ist zwar ganz nett, aber sobald man in der Praxis ist, nützen diese gelernten Beispiele oft gar nichts. Erst wenn man konkrekte Probleme mit einer Sprache lösen kann, hat man sie einigermaßen verstanden, und konkrete Probleme entstehen nur in der Praxis.
Wenn Du jetzt noch Schwierigkeiten hast, es wird sich legen, je mehr Du damit arbeitest. Ich hatte vorher 8 Jahre 20 Jahre alte C-Programm pflegen und erweitern müssen, und wenn man dazu noch den Code auf 6 verschiedenen Plattformen portieren muß, lernt man eine Menge. Deshalb nimm meine Hinweise nicht persönlich, sondern eher als wichtigen Tipps:

Initialisiere immer!
Reserviere immer ausreichend Speicher, und am besten selbst
Fange Bufferüberläufe sofort ab!
Prüfe vorher, wie lange Eingaben und Strings werden
Lieber mehr abprüfen als zuwenig


usw. Man glaubt gar nicht, was alles in C zu Probleme führen kann, besonders wenn es viele Funktionen und Schnittstellen gibt.

Gast
2007-09-24, 23:49:57
Reserviere immer ausreichend Speicher, und am besten selbst
Fange Bufferüberläufe sofort ab!
Prüfe vorher, wie lange Eingaben und Strings werden
Lieber mehr abprüfen als zuwenig
[/LIST]

usw. Man glaubt gar nicht, was alles in C zu Probleme führen kann, besonders wenn es viele Funktionen und Schnittstellen gibt.
Wie wärs einfach mal damit eine richtige Programmiersprache zu benutzen und nicht so ein Minenfeld wie C++/C#? :rolleyes:

Coda
2007-09-24, 23:55:27
Wie wär's einfach mal den gravierenden Unterschied zwischen C++ und C# zu kennen bevor man irgend nen Müll postet?

Neomi
2007-09-25, 01:03:39
Wie wärs einfach mal damit eine richtige Programmiersprache zu benutzen und nicht so ein Minenfeld wie C++/C#? :rolleyes:

Das "/C#" ignoriere ich einfach mal, da es hier keinen Sinn ergibt.

Wenn du dir mit einem Hammer die Finger zertrümmerst, sind dann Hämmer schlechte Werkzeuge oder bist nicht eher doch du zu ungeschickt dafür? C++ ist ein gutes und mächtiges Werkzeug für erfahrene Leute, die wissen, was sie tun. C++ ist nicht für Möchtegernprogrammierer, die glauben programmieren zu können, weil sie mal ein Buch darüber gelesen oder eine Vorlesung dazu besucht haben.

Dieses Bashing gegen Sprachen, die den Möchtegernprogrammierer nicht vor sich selbst schützen, geht mir auf den Senkel. Die echten Probleme sind sowieso unabhängig von der verwendeten Sprache. Kein Garbage Collector hilft bei der Lösung von Logikproblemen. OOP-Zwang führt nur dazu, daß alle noch so kleinen Dinge in Miniklassen gestopft werden, sinnvolle Datenstrukturen und Interfaces gibt es aber nach wie vor nicht automatisch.

Gast
2007-09-25, 10:07:17
Ok, noch ist er nicht im Büro aber ich mach jetzt einfach trotzdem mal hier weiter :)

Momentan sieht es jetzt so aus:

void receive_frame() {
/* nächstes Zeichen von STDIN holen */
/* wenn != '>', dann Abbruch/Fehler */
/* Rest der Zeile von STDIN einlesen und in framebuffer schreiben */

unsigned char framebuffer[254];
FILE* testfile;

testfile = fopen("test.txt","r");

if(fgets(framebuffer,254,testfile) == NULL)
printf("fgets error\n");
else
printf("%s", framebuffer);

fclose(testfile);
}

Jetzt setzt es bei mir auch schon wieder aus. Wie kann ich jetzt nachprüfen, ob das ERSTE Zeichen ein ">" ist und nur dann den Rest der Zeile einlesen ? Wie mach ich das dann für mehrere Zeilen ?

Gast
2007-09-25, 10:10:03
Ok, noch ist er nicht im Büro aber ich mach jetzt einfach trotzdem mal hier weiter :)

Momentan sieht es jetzt so aus:

void receive_frame() {
/* nächstes Zeichen von STDIN holen */
/* wenn != '>', dann Abbruch/Fehler */
/* Rest der Zeile von STDIN einlesen und in framebuffer schreiben */

unsigned char framebuffer[254];
FILE* testfile;

testfile = fopen("test.txt","r");

if(fgets(framebuffer,254,testfile) == NULL)
printf("fgets error\n");
else
printf("%s", framebuffer);

fclose(testfile);
}

Jetzt setzt es bei mir auch schon wieder aus. Wie kann ich jetzt nachprüfen, ob das ERSTE Zeichen ein ">" ist und nur dann den Rest der Zeile einlesen ? Wie mach ich das dann für mehrere Zeilen ?

Noch hinzugefügt:

Das soll eingelesen werden:

> 0A 00 00 A4 00 00 00

Überprüfen soll er wie gesagt nur das ">" und in "framebuffer" soll nur "0A 00 00 A4 00 00 00" reingeschrieben werden, also ohne das ">" und das erste Leerzeichen.

Gast
2007-09-25, 10:33:33
Oh man, ich glaub ich weiß jetzt, wie der Entwickler das gemeint hat mit "hole von STDIN":

unsigned char framebuffer[254];

fgets(framebuffer,254,stdin); <-- !!!

printf("%s",framebuffer);

Wenn ich jetzt in der Eingabeaufforderung "meinprogramm.exe < test.txt" eingebe, klappt das.
Nur mit den Überprüfungen stell ich mich noch dämlich an...

PHuV
2007-09-25, 12:51:30
Wie wärs einfach mal damit eine richtige Programmiersprache zu benutzen und nicht so ein Minenfeld wie C++/C#? :rolleyes:

Was wäre den Deiner Meinung nach eine "richtige" Programmiersprache? :rolleyes:

Fakt ist, daß man mit C/C++ eine Menge machen kann, wo man mit anderen Sprachen u.U. viel umständlicher arbeiten muß. Alles eine Frage der Aufgabenstellung, der Bedürfnisse etc. Aber wie heißt es so schön, wenn ein Esel in der Bibel ließt, wird aus ihm noch lange kein Heiliger. ;)

Gast
2007-09-25, 13:32:26
Aber wie heißt es so schön, wenn ein Esel in der Bibel ließt, wird aus ihm noch lange kein Heiliger. ;)
Und so ein Spruch von DIR! :eek: :eek: :eek:

Gast
2007-09-25, 14:24:12
Und so ein Spruch von DIR! :eek: :eek: :eek:

Ich wollte nur anmerken, dass das nicht ich (der Threadersteller) war ! :)

PHuV
2007-09-25, 16:24:14
Und so ein Spruch von DIR! :eek: :eek: :eek:

Warum, auch ein Atheist darf flexibel sein und von anderen Quellen nehmen, gelle ;) .

Gast
2007-09-28, 10:02:39
So, nachdem ich die letzten Tage ne andere Aufgabe hatte, bin ich wieder bei unsrem tollen Programm :):

unsigned char framebuffer[254] = { '0' };

void receive_frame() {
/* naechstes Zeichen von STDIN holen */
/* wenn != '>', dann Abbruch/Fehler */
/* Rest der Zeile von STDIN einlesen und in framebuffer schreiben */

unsigned char check_char;
unsigned char input[254] = { '0' };
int i;

check_char = fgetc(stdin); /* naechstes Zeichen holen */

if(check_char != '>') /* pruefen ob != '>' */
{
printf("Wrong character, '>' expected\n");
exit(1);
}
else
{
fgets(input,254,stdin); /* Rest der Zeile lesen */
}

for(i=1; i<sizeof(input); i++) /* in framebuffer schreiben */
{
framebuffer[i-1] = input[i];
}

printf("In framebuffer steht: %s\n",framebuffer);

send_receive_frame();

/* in Zukunft irgendwann: CRC falsch => alles nochmal */
}

void send_receive_frame(){
/* nächstes Zeichen von STDIN holen */
/* wenn != '<', dann Abbruch/Fehler */
/* Rest der Zeile mit framebuffer vergleichen */
/* nicht identisch => Abbruch/Fehler */

unsigned char check_char;
unsigned char input[254] = { '0' };
unsigned char compare_buffer[254] = { '0' };
int i;

check_char = fgetc(stdin);

if(check_char != '<')
{
printf("Error: Wrong character, '<' expected\n");
exit(1);
}
else
{
fgets(input,254,stdin);
}

for(i=1; i<sizeof(input); i++)
{
compare_buffer[i-1] = input[i];
}

printf("In compare_buffer steht: %s\n",compare_buffer);

if(compare_buffer == framebuffer) // Wieso springt er hier immer in die
{ // else, framebuffer und
printf("OK!\n"); // compare_buffer muessten doch
} // gleiche sein ?!
else
{
printf("Error: framebuffer and compare_buffer not equal\n");
exit(1);
}

//receive_frame();
}

Meine Frage steht im CODE !

Gast
2007-09-28, 10:35:19
Ich glaub ich bin selber drauf gekommen: Wenn ich in der if(framebuffer == compare_buffer) jeweils ein * davorschreibe, also auf den Inhalt der beiden char-arrays schaue, wird nur die erste Stelle im array verglichen.

Frage:

Wie kann ich jetzt z.B. den eingelesenen String "0A 00 00 A4 00 00 00" in Binärcode umwandeln, so dass dann nur noch "00001010 usw." dransteht ? Das sollte sich doch dann einfach vergleichen lassen ?

anderer Gast
2007-09-28, 10:55:52
Ich glaub ich bin selber drauf gekommen: Wenn ich in der if(framebuffer == compare_buffer) jeweils ein * davorschreibe, also auf den Inhalt der beiden char-arrays schaue, wird nur die erste Stelle im array verglichen. Das liegt daran, daß Dein Arrays eigentlich Pointer auf den Anfang ihrer Speicherbereiche ist. Da dieser Pointer hier momentan auf die erste Stelle zeigen, gibt hier auch das erste Zeichen des Arrays ein *(++ptr) eben das zweite. Wenn Du aber die Pointer direkt vergleichst, vergleichst Du deren Adressen.

anderer Gast
2007-09-28, 10:59:12
Das liegt daran, daß Deine Arrays eigentlich Pointer auf den Anfang ihrer Speicherbereiche ist sind. Da dieser Pointer hier momentan auf die erste Stelle im jeweiligen Speicherbereich zeigen, gibt es hier auch das erste Zeichen des Arrays zurück - und ein *(++ptr) eben das zweite. Wenn Du aber die Pointer direkt vergleichst, vergleichst Du deren Adressen. ist das wieder früh gewesen...

Gast
2007-09-28, 11:00:51
Ja, das hab ich verstanden :)

Jetzt muss mir nur noch irgendwer sagen, wie ich aus den beiden Arrays was hinbekomme, das man dann auch vergleichen kann :D