Unerwartetes Programmverhalten vorbeugen --- Tipps ?
-
Kann ich irgend etwas generelles tun um wirklich merkwürdiges Verhalten vorzubeugen ?
Vielleicht irgendwelche Faustregeln.
Und dazu möchte ich einen kleinen Fall anbringen:Ein Problem mit Substring: (Dazu fällt mir grad ein, mischen wäre ein böser Grund, wegen ifstream und System::String)
So ist meine Notlösung:
void TForm2::Laden(String ProfilePath) { ProfilePath += "\\config.cfg"; std::string line; std::ifstream Lesen; Lesen.open(ProfilePath.c_str()); while (std::getline(Lesen,line)) { int leno = 0; char chs; String Zeile = line; while (leno < line.length()) { leno++; chs = line[leno]; if (!twoupfound && chs != '"') { KEY += chs; } if (chs == '"') { twoupfound = true; } else if (twoupfound) { ACTION += chs; } } if (KEY == "Irgendein Commando") // DO ANYTHING }
Ansonsten hätt ichs so gemacht:
if (Zeile.SubString(13,Zeile.Length()-13) /*oder line das weiß ich nicht mehr*/ == "Wert") //DO
Ich hab mir das sogar ausgeben lassen, mit begrenzung, um leerzeichen am ende auszuschließen, der debugger hat nichts aufschlussrecihes geliefert.
Obwohl die Bedingung hätte gegeben sein müssen, es war immer falsch.
Und nun das beste: wenn ich das in ne Variable Pack und davon was abhängen will (mit SubString) kann ich auch 1000 eingeben, es bleibt "Wert".Könnte am ifstream verbunden mit der datei liegen, glaub ich aber nicht.
möglicherweise müsste der openmode noch ios::binary haben, aber das teste ich nicht mehr das prog ist sowieso schon alt.Sowas hab ich öfter mal, wenn auch noch nie so strange, aber (diese schon ausgeschlossen) bild ich mir sowas manchmal auch nur ein wenns schon so 3 Uhr (morgens) ist. Aber bei diesem bin ich mir Sicher.
-
Ich kann deinen Code nicht deuten.
Zeig doch mal einen konkreten Beispiel-String und was genau du darin prüfen willst.
-
geb ich die gelesene Zeile aus, sieht die zb so aus: "seta gamevolume "0.85""
dann teilt mir meine kleine Schleife (ineffizient) das so auf:
|seta gamevolume| + |0.85| (| Begrenzung zur Verdeutlichung hier).
mit SubString bzw substring
wird aus line = "seta gamevolume "0.85"" (SubString(0,line.size()-3) -> "seta gamevolume "0.85"". Na was aufgefallen ??? KEINE VERÄNDERUNG.
Wie so was kommen kann weiß ich nicht. oder wenn ich das erste Zeichen ansprechen will, muss ich nicht line[0] sondern [1] angeben.
Moment ich grab das noch mal aus, dann kann ich genauere Infos geben.
-
Bezüglich String (aus der VCL) gibt es einen wichtigen Unterschied zu std::string: der Index beginnt bei 1 (nicht bei 0)!
Ist ein Delphi-Erbe...