C programm vorheriges Datum mit aktuellen Datum vergleichen?
Hallo, ich lese eine Datei in C ein und möchte das Datum von der aktuellen Zeile mit der vorherigen Zeile vergleichen. Wenn dies der Fall ist möchte ich die aktuelle Zeile komplett löschen (aktuell werden diese Zeilen nur gezählt mit der Variable count). Ich verwende memcpy um das Aktuelle Datum in die Variable datumAlt, em Ende der while Schleife, zu speichern. Nur ist es so sobald die Schleife von vorne beginnt steht in datumAlt auch wieder das aktuelle Datum. Habe dies mit dem Debugger festgestellt. Weiß jemand warum dies so ist, bzw. wie kann ich diesen Fehler beheben? Danke für einen Tipp.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 1000 // maximum length of a line in the input file
char lines[MAX_LINE_LENGTH];
const char trennzeichen[] = ";";
int main()
{
// Open the input file
FILE *fp = fopen("alles_perfekt.txt", "r");
if (fp == NULL)
{
printf("Failed to open the file.\n");
return 1;
}
int count =0;
char ticker[50], datumAktuell[50], datumAlt[50];
char line[MAX_LINE_LENGTH];
while ( (fgets(line, sizeof(line), fp) != NULL))
{
sscanf(line,"%[^;];%[^;];\n",ticker, datumAktuell);
if(datumAktuell==datumAlt)
{
count++;
printf("%d\n",count);
}
memcpy(datumAlt, datumAktuell, sizeof(datumAktuell));
}
// Close the input and output file
fclose(fp);
return 0;
}
2 Antworten
Vom Beitragsersteller als hilfreich ausgezeichnet
Ein klassischer Vergleichsfehler von Pointer/Adressen
datumAktuell==datumAlt,
Du brauchst: strcmp(datumAktuell,datumAlt)
Bei memcpy(datumAlt, datumAktuell, sizeof(datumAktuell)) ist auch ein schwerer klassischer Fehler (implizit Buffer overflow) gemacht worden:sizeof(datumAktuell)!
HIER MUSS sizeof(datumAlt) verwendet werden.
Zufällig sind hier beide string(buffer) 50 char groß, es wird also funktionieren, aber nicht, wenn mal datumAktuell größere gemacht wird.
Woher ich das weiß:Studium / Ausbildung
KarlRanseierIII
16.07.2023, 17:23
@Tommentator
Das eine ist lines, das andere line. Insofern sollte das kein Problem darstellen.
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Programmiersprache, Programmieren & Softwareentwicklung
if ( strncmp(datumAlt, datumAktuell,
sizeof(datumAlt)<sizeof(datumAktuell)?
sizeof(datumAlt):sizeof(datumAktuell)) ==0 )
Wäre eine Option.
Das ist sicher so nicht gewollt, oder?