Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

ich hab folgenden code,


char strname[8];

file->ReadString(strname, 9);



	if(strname=="WERT_BER")

	{

		...

	}

aber obwohl offensichtlich in strname der Wert "WERT_BER" drinnen steht (per Debugger überprüft), komm ich nicht in den Aufruf von if rein.

Muss ich da beim Vergleich irgendwie anders vorgehen?!:confused:

Wer weiß Hilfe?!

Technician

Geschrieben

Also, zum ersten würde ich sagen steht in Deinem Array nicht wirklich 'WERT_BER' wenn es ein char [8] ist! An einem String ist meines Wissen nach am Ende immer ein Nullzeichen. Das würde zum Beispiel erklären warum er den Vergleich nicht macht.

Ich benutze zum Vergleichen immer den Befehl strcmp! Unter Windows kann man auch _stricmp benutzen was nicht auf Gross- und Kleinschreibung achtet. Aber nur unter Windows.

Bine

Geschrieben

wenn ich schreib


char strname[8];

file->ReadString(strname, 9);



	if(strcmp(strname, "WERT-BER"))

	{

		...

	}


trotz "Gebetsmühlen-Beachtung"

geht's aber auch nicht...

auch nicht bei "WERT-BER\0" oder irgendwas...

:confused:

Geschrieben
Originally posted by Technician

wenn ich schreib



char strname[8];

file->ReadString(strname, 9);



	if(strcmp(strname, "WERT-BER"))

	{

		...

	}


trotz "Gebetsmühlen-Beachtung"

geht's aber auch nicht...

auch nicht bei "WERT-BER\0" oder irgendwas...

:confused:

Das passt eigentlich alles bis auf eines, das er wieder nicht in den IF-Zweig reinläuft da bei einer Übereinstimmung 0 rauskommt was dann ein FALSE ist also eher eine "!" davor oder

gleich auf " == 0 " prüfen.

Frank

Geschrieben

Wie meine Vorgänger schon gesagt haben, muss in deine Zeile noch ein == 0 rein. strcmp ist eine Funktion, wenn Du so willst. Sie überprüft einen String Zeichenweise. Es gibt die Option == 0, >0 und <0.

Wenn Du mehr Informationen dazu haben willst, dann schau Dir diese Seite mal an - ist fast so aufgebaut wie die in der MSDN (welche ich Moment nicht habe, weil unser firmeninterner Server down ist).

Dein Code müsste so aussehen:

...char strname[8];

file->ReadString(strname, 9);



	if(strcmp(strname, "WERT-BER")==0)

	{

		...

	}

Bine

Geschrieben

Denke ich auch! Aber sie ließt das ganze durch eine Funktion ein mit der ich noch nie gearbeitet habe, und ich weiss nicht wie die das handhabt! Vielleicht braucht diese Funktion kein Nullzeichen am Ende! Komisch finde ich das allerdings auch!

Bine

Geschrieben

Vielleicht wird das 'R' auch nicht mehr verglichen da strcmp von dem array ja schon ein endzeichen bekommen hat.

Es ist aber noch ein Fehler drin glaub ich: mit ReadString werden 9 Zeichen eingelesen, es dürften aber bei der Feldgröße nur 7 sein!

Geschrieben

@BikerJoe

Nene...das ReadString liest maximal 9 Zeichen ein, so wie das hier gemacht ist.

Real liests aber in diesem Fall nur 7 Zeichen ein und haengt als 8. ne Null an, da das Array ja nicht groesser ist.

Da nun der Vergleichsstring 8 Zeichen hat, wird man in dem hier beschriebenen Fall so nie in das IF kommen.

Goos

Geschrieben
Originally posted by Guybrush Threepwood

Ich weiß nicht, wäre schon etwas seltsam aber wenn das Array nur 8 Zeichen groß ist

und das Wort komplett drinsteht.:(

Ist aber so. CStdioFile::ReadString weiß nicht, wie groß der Puffer wirklich ist, und muss sich auf die Angabe des Programmierers verlassen. Wenn der sagt, dass der Puffer 9 Bytes groß ist, dann liest ReadString (maximal) 8 Zeichen, und hängt ein Nullzeichen dran. Dass dieses dann aber außerhalb des allokierten Speichers steht, ist natürlich ein Fehler des Programmierers, der fatale Folgen haben kann.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...