Technician Geschrieben 4. November 2002 Geschrieben 4. November 2002 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 Zitieren
Woodstock Geschrieben 4. November 2002 Geschrieben 4. November 2002 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 Zitieren
Goos Geschrieben 4. November 2002 Geschrieben 4. November 2002 Oh Technician....pass nur auf, dass Klotzkopp das nicht sieht :eek: Ich verweise an dieser Stelle mal auf ihn und seine Gebetsmühle Goos Zitieren
Technician Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 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: Zitieren
Goos Geschrieben 4. November 2002 Geschrieben 4. November 2002 Mach doch mal nen Versuch mit if(strcmp(strname, "WERT-BER") == 0) Goos Zitieren
Technician Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 Originally posted by Goos Mach doch mal nen Versuch mit if(strcmp(strname, "WERT-BER") == 0) Goos Bingo - hab's grad selber gemerkt! Zitieren
fmarx2000 Geschrieben 4. November 2002 Geschrieben 4. November 2002 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 Zitieren
Woodstock Geschrieben 4. November 2002 Geschrieben 4. November 2002 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 Zitieren
Technician Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 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 Zitieren
BikerJoe Geschrieben 4. November 2002 Geschrieben 4. November 2002 Trotz allem ist dein Feld aber noch zu klein. Das Endezeichen müßte doch eigentlich statt dem 'R' als letztes im Feld stehen, oder? Zitieren
Crush Geschrieben 4. November 2002 Geschrieben 4. November 2002 Ich will nur noch an etwas erinnern: strcmp führen bei Borland und Microsoft-Compilern zu unterschiedlichen Ergebnissen! Zitieren
Woodstock Geschrieben 4. November 2002 Geschrieben 4. November 2002 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 Zitieren
BikerJoe Geschrieben 4. November 2002 Geschrieben 4. November 2002 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! Zitieren
Goos Geschrieben 4. November 2002 Geschrieben 4. November 2002 @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 Zitieren
Guybrush Threepwood Geschrieben 4. November 2002 Geschrieben 4. November 2002 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. Zitieren
Goos Geschrieben 4. November 2002 Geschrieben 4. November 2002 Wieso sollte kein 0 angehaengt werden? Zitieren
Guybrush Threepwood Geschrieben 5. November 2002 Geschrieben 5. November 2002 Ich weiß nicht, wäre schon etwas seltsam aber wenn das Array nur 8 Zeichen groß ist und das Wort komplett drinsteht. Zitieren
Klotzkopp Geschrieben 5. November 2002 Geschrieben 5. November 2002 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. Zitieren
Empfohlene Beiträge
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.