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.

Empfohlene Antworten

Veröffentlicht

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

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

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:

Originally posted by Goos

Mach doch mal nen Versuch mit if(strcmp(strname, "WERT-BER") == 0)

Goos

Bingo - hab's grad selber gemerkt!:)

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

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

Mein "Bingo - hab's grad selber gemerkt" sollte heißen, ich bin selber drauf gekommen, dass da ein ==0 rein muss und jetzt funktioniert's ;):)

Trotz allem ist dein Feld aber noch zu klein. Das Endezeichen müßte doch eigentlich statt dem 'R' als letztes im Feld stehen, oder?

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

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!

@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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

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.