Veröffentlicht 4. November 200222 j 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
4. November 200222 j 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
4. November 200222 j Oh Technician....pass nur auf, dass Klotzkopp das nicht sieht :eek: Ich verweise an dieser Stelle mal auf ihn und seine Gebetsmühle Goos
4. November 200222 j 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:
4. November 200222 j Originally posted by Goos Mach doch mal nen Versuch mit if(strcmp(strname, "WERT-BER") == 0) Goos Bingo - hab's grad selber gemerkt!
4. November 200222 j 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
4. November 200222 j 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
4. November 200222 j 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
4. November 200222 j Trotz allem ist dein Feld aber noch zu klein. Das Endezeichen müßte doch eigentlich statt dem 'R' als letztes im Feld stehen, oder?
4. November 200222 j Ich will nur noch an etwas erinnern: strcmp führen bei Borland und Microsoft-Compilern zu unterschiedlichen Ergebnissen!
4. November 200222 j 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
4. November 200222 j 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!
4. November 200222 j @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
4. November 200222 j Die 9 steht für die Zeichen die max. eingelesen werden ohne den Null character am Ende. Also scheint diese Funktion diesen auch nicht anzuhängen.
5. November 200222 j Ich weiß nicht, wäre schon etwas seltsam aber wenn das Array nur 8 Zeichen groß ist und das Wort komplett drinsteht.
5. November 200222 j 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.