Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Suche String in Datei mit C

Empfohlene Antworten

Veröffentlicht

Hallo,

Ich hab hier mal wieder ein Programm geschrieben, das nicht so richtig funktioniert. Vielleicht kann mir jemand sagen wo ich den Fehler gemacht habe.

Ich wollte ein Programm schreiben, das mir einen bestimmten String ("1st") in einer Binärdatei sucht und als Ausgabe denn Offset des Strings liefert.

Ich glaube, es gibt auch eigene Funktionen, mit denen ich einen String praktikabler suchen kann ,aber mich würde jetzt mal interessieren warum mein Programm nicht funktioniert. Das liefert zwar ein Ergebnis, aber das ist falsch. :-/

Ciao

Tizian

---------------------------------------------------------------------------

---------------------------------------------------------------------------

#include<stdio.h>

#include<stdlib.h>

int main(void){

FILE *q, *z;

int zeichen, i, k=0 ,fundstelle=0;

i= 0;

q = fopen("datei.bin", "rb");

z = fopen("zieldatei.txt", "w+t");

while((zeichen=getc(q)) != EOF){

if((zeichen == '1')){

k =i;

i++;

}

if((zeichen == 's') && (i==k+1)){

i++;

}

if((zeichen == 't') && (i==k+2)){

i++;

fundstelle = k;

fprintf(z, "Die Fundstelle ist an Offsetposition %d \n", fundstelle);

}

else {

i++;

}

}

return 0;

}

Hallo,

Zähl doch mal nach, was in deiner Schleife mit i passiert, wenn zeichen '1' ist.

So wie ich das sehe: Egal welches Zeichen getc() liefert, i wird immer um 1 hochgezählt. Der Unterschied für das Zeichen '1' ist, das die Variable k mit dem Wert von i initialisiert wird, anschließend dann das Inkrement. Ich glaube, das sollte funktionieren.

Ein Fehler, den ich gerade entdecke: Beim Test auf 't' wird nicht mehr auf das 's' geprüft, da werde ich noch eine Variable einführen. Vielleicht klapppts ja dann.

Ciao

Tizian

So wie ich das sehe: Egal welches Zeichen getc() liefert, i wird immer um 1 hochgezählt.
Soweit schon mal falsch.

Der Unterschied für das Zeichen '1' ist, das die Variable k mit dem Wert von i initialisiert wird, anschließend dann das Inkrement.
Das ist aber nicht das einzige, was passiert. Da die dritte Bedingung nicht wahr ist, wird deren else-Block auch ausgeführt. Damit wird i zweimal inkrementiert.

Hallo,

Oder um es anders zu formulieren: Dein else bezieht sich nicht auf alle drei if, sondern nur auf das letzte.

Ok, danke. Dann muss ich mir mal was einfallen lassen, das ich da nicht jedesmal inkrementiere wenn die dritte Bedinfgung falsch ist.

Ich könnte ja stattdessen eine weitere if-Schleife aufstellen, mit der Bedingung das alle vorhergehenden schleifen nicht eingetreten sind.

Das krieg ich dann schon hin, danke für deine Hilfe!

Ciao

Tizian

Ich könnte ja stattdessen eine weitere if-Schleife aufstellen, mit der Bedingung das alle vorhergehenden schleifen nicht eingetreten sind.
Es gibt keine "if-Schleife".

Du könntest in den ersten beiden if-Blöcken die weitere Verarbeitung des Schleifenkörpers abbrechen (continue) oder das Ganze als if/else if-Kaskade aufbauen.

So,

Mit der if/else if -Kaskade und einem abschließendem else hab ich es jetzt geschaft, mein Programm liefert mir die gewünschte Adresse.

Ich mache zwar gerade einen C-Kurs, aber Kontrollstrukturen haben wir noch nicht durchgenommen. Jetzt hab ich mir auf eigene Faust ein paar Sachen zusammengesucht, um ein Programm zu schreiben das mich persönlich interessiert. Deswegen sind meine Versuche momentan bestimmt noch recht holprig.

Ciao

Tizian

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.