Dateien öffnen

ok alles geht es tauchte nur ein problem auf:

Code:
char text[100][100];
FILE *stream;
stream = fopen( "datei.txt", "r" );
fscanf(stream, "%s",text[1]);
fclose(stream);

if(text[1] == "1")
//-anweisungen-

Die Variable text gibt in eine MessageBox geleitet die zahl aus die ich auch in die datei datei.txt geschrieben habe. Also die "1". Wenn ich nun versuche abzufragen ob es sich um die 1 handelt sagt das programm nein. Weiß jemand woran das liegen könnte?
 
Zuletzt bearbeitet:
Vielleicht ist es auch einfach noch zu früh aber warum definierst du oben ein zweidemensionales Array ! :eek:
 
Kaiser206 hat gesagt.:
ok alles geht es tauchte nur ein problem auf:

Code:
char text[100][100];
if(text[1] == "1")

Man kann keine C-Strings mit dem == Operator so vergleichen. C-Strings sind Pointer und wenn du 2 C-Strings miteinander so vergleichst, vergleichst du nur die Pointer-Werte aber nicht den Inhalt der Strings.

Zum C-Strings vergleichen mußt du strcmp bzw. strncmp nehmen:
Code:
if (strcmp(text[1], "1") == 0)) ...
Die Funktion gibt 0 zurück wenn die beiden Strings gleich sind, -1 wenn der erste lexikalisch vor dem zweiten String einsortiert werden muß, +1 anderenfalls.

Ich weiß ja nicht, willst du unbedingt C programmieren? In C++ ist das alles etwas einfacher, std::string's kannst du auch mit dem == Operator vergleichen und das zeilenweise Einlesen von Dateien ist auch einfacher etc.

fhr hat gesagt.:
Vielleicht ist es auch einfach noch zu früh aber warum definierst du oben ein zweidemensionales Array !
Das ist völlig OK. Das ist ein Array von 100 Elementen von C-Strings der Länge 100.

Gruß
 
Das ist völlig OK. Das ist ein Array von 100 Elementen von C-Strings der Länge 100.

Ich sag ja es war zu früh ^^
Aber es sind keine Element von C-Strings.

Man kann keine C-Strings mit dem == Operator so vergleichen. C-Strings sind Pointer und wenn du 2 C-Strings miteinander so vergleichst, vergleichst du nur die Pointer-Werte aber nicht den Inhalt der Strings.

Man kann ein CString mit == verlgeichen. Is dann wie ein compare.
Is nicht wie in Java mit den Referenzen ;)
 
fhr hat gesagt.:
Ich sag ja es war zu früh ^^
Aber es sind keine Element von C-Strings.

Man kann ein CString mit == verlgeichen. Is dann wie ein compare.
Is nicht wie in Java mit den Referenzen ;)
Nochmal zur Erklärung, mit C-Strings meine ich die Strings der Sprache C (ANSI C) und nicht die Strings (bzw. String-Klassen wie std::string, AnsiString bzw. CString) von C++.

Gruß
 
Ja, aber die C-Strings sind ja char-Arrays. Und die kann man eben nicht mit "==" vergleichen, wie schon geschrieben wurde. Du kannst zwei Methoden verwenden, denke ich.
Erstens du benutzt die C-Funktionen strcmp oder strncmp, dann kannst du den String mit einem anderen String vergleichen und bekommst Null zurück bei Übereinstimmung. Oder, wenn du nur ein Zeichen prüfen willst, kopierst du es in einen char und kannst darauf den Vergleichsoperator anwenden.

Mfg

langer
 
ok,
aber wieso ist das jetzt nicht korrekt?

Code:
char* abc = "irgendwas";
char text[100][100];

if (strcmp(text[1], abc) != 0)
{
//-Anweisungen-
}

Das hingegen funktioniert einwandfrei:

Code:
char text[100][100];

if (strcmp(text[1], "irgendwas") != 0)
{
//-Anweisungen-
}
 
In der ersten Variante vergleichst du wieder mit einem Pointer. Du mußt die Adresse des Strings übergeben, also &abc schreiben, dann sollte es klappen.

Mfg

langer
 
langer1801 hat gesagt.:
In der ersten Variante vergleichst du wieder mit einem Pointer. Du mußt die Adresse des Strings übergeben, also &abc schreiben, dann sollte es klappen.
Das stimmt nicht! Beide Varianten sollten das gleiche Ergebnis liefern und bei mir tun sie das auch.

@Kaiser206: Hast du denn text[1] irgendwie initialisiert?

Gruß
 

Neue Beiträge

Zurück