Dateien öffnen

Code:
char text[100][100];
char* rid = "0001";
FILE* stream;

while(true)
{
  stream = fopen( "datei.txt", "r" );
  fscanf(stream, "%s",text[1]);
  fclose(stream);

  if (strcmp(text[1], rid) != 0)
  {
    //-anweisung-
  }
    rid = text[1];
}

so ungefähr ist meine funktion. (Natürlich ist die schleife mit while dann anders...)...


Die -anweisung- soll nur ausgeführt werden, wenn sich der wert rid verändert hat.
Wenn ich rid durch ein "0001" Feld ersetze funktioniert auch alles. Im Pronzip kann hier ja nichts falsches sein oder? Das Programm wird compiliert, die -anweisung- einmal ausgeführt und das wars dann auch. Wenn ich die datei verändere passiert nichts. Wenn ich ein MessageBox in das Programm einbaue das text und rid anzeigen soll, sehe ich das beide den "gleichen" wert haben! wie kann das dann sein das sie nicht verglichen werden?
 
Zuletzt bearbeitet:
Kaiser206 hat gesagt.:
Code:
char text[100][100];
char* rid = "0001";
...
    rid = text[1];

Die -anweisung- soll nur ausgeführt werden, wenn sich der wert rid verändert hat.
Wenn ich rid durch ein "0001" Feld ersetze funktioniert auch alles. Im Pronzip kann hier ja nichts falsches sein oder?
Doch! ;-) Du kannst C-Strings auch nicht einfach so zuweisen - weil du dabei nur Pointer kopierst. Das heißt nachdem deine Schleife einmal durchlaufen wurde ist (der Pointer) rid immer identisch mit (dem Pointer) text[1]. Wenn die Pointer auf die gleiche Stelle zeigen ist deren Inhalt logischerweise auch identisch und strcmp liefert dann 0 zurück.

Um einen C-String zu kopieren mußt du erstmal dafür sorgen, das im Ziel auch genug Platz ist! (!) Dann kannst du die Funktion strncpy (bzw. die etwas unsichere Variante strcpy) benutzen um den Inhalt von dem Quell-String in den Ziel-String zu kopieren.

Code:
char rid[100] = "00001";

while (...) {
  if (strcmp(text[1], rid) != 0) {
    ...
  }
  strncpy(rid, text[1], sizeof(rid) / sizeof (char));

Wie gesagt in C++ ist das alles einfacher, da kannst du die Zuweisung benutzen.

Gruß
 

Neue Beiträge

Zurück