Problem mit MouseUp im StringGrid



  • Mal abgesehen davon, daß man SaveDialog vielleicht besser so

    if (SaveDialog1->Execute())
        {
          AnsiString filename= SaveDialog1->FileName;
          if(!filename.IsEmpty())
          {
    	  myIOHelper.Entrys = Entrys;
        	  myIOHelper.SaveUserListAs(filename);
          }
        }
    

    verwenden sollte, kann ich allerdings auch keinen offensichtlichen Fehler erkennen. Bist
    Du Dir sicher, daß Du auch immer vor dem Kompilieren abspeicherst? Vielleicht hilft es ja auch
    das Projekt neu zu erzeugen (über Projekt|<Projekt> erzeugen). Und dann gibt es ja noch die
    anderen bekannten Tips wie *.tds-Datei löschen, *.obj-Dateien löschen etc.

    Gruß,

    Alexander



  • Hast Du irgendwelche Fremdkomponenten installiert? Hast Du irgendwo using namespace verwendet?
    Ist es möglich das Projekt mal irgendwo zum Download bereitzustellen?



  • Joe_M. schrieb:

    Hast Du irgendwelche Fremdkomponenten installiert? Hast Du irgendwo using namespace verwendet?
    Ist es möglich das Projekt mal irgendwo zum Download bereitzustellen?

    Ja ich hab Fremdkomponenten drin.
    ne kein using namespace.
    Ne Download ist noch keiner verfügbar.

    Ist schon seltsam, ich arbeite im Projekt mit std::Vector die ne Struktur verwalten, diese wiederrum besteht aus mehreren char's.
    Nun kopiere ich mit strcpy entsprechend Strings in die Struktur um sie dann in den Vector zu hängen

    User_Entry test;
    strcpy(test.Beschreibung, txtBeschreibung->Text.c_str());
    

    und ich denke mal das das Prog damit nicht zurecht kommt, obwohl es ansonsten einwandfrei funzt, un beim debuggen auch alles klar geht.

    Mich wundert es nur das es dann an verschiedenen Stellen im Programm Probleme bei der Textausgabe gibt.



  • Zeig mal die Strukturdeklaration. Ausserdem sollte man von der Verwendung von strcpy absehen und es durch strncpy ersetzen.

    -junix



  • junix schrieb:

    Ausserdem sollte man von der Verwendung von strcpy absehen und es durch strncpy ersetzen.

    -junix

    Und warum???
    Ich hatte damit noch nie Probleme

    struct User_Entry
    {
      char Beschreibung[35];
      char Benutzername[35];
      char Passwort[35];
      char URL[55];
      char Kategorie[35];
    };
    


  • Weil du so z.B. in txtBeschreibung einen beliebig langen String eingeben kannst und dieser dann zu einem klassischen Buffer Overflow führen kann. Mit strncpy kann dir das nie passieren. strcpy ist eine der häufigsten Ursachen für Sicherheitslücken. Daher gleich mal abgewöhnen.

    Dazu kommt, dass bei nicht kontrollierter Beschreibung eines feststehenden Puffers es z.B. auch zu folgenden Effekten kommen kann:

    Mich wundert es nur das es dann an verschiedenen Stellen im Programm Probleme bei der Textausgabe gibt.

    ... und das sind noch die harmlosen...



  • junix schrieb:

    Weil du so z.B. in txtBeschreibung einen beliebig langen String eingeben kannst und dieser dann zu einem klassischen Buffer Overflow führen kann. Mit strncpy kann dir das nie passieren. strcpy ist eine der häufigsten Ursachen für Sicherheitslücken. Daher gleich mal abgewöhnen.

    Dazu kommt, dass bei nicht kontrollierter Beschreibung eines feststehenden Puffers es z.B. auch zu folgenden Effekten kommen kann:

    Mich wundert es nur das es dann an verschiedenen Stellen im Programm Probleme bei der Textausgabe gibt.

    ... und das sind noch die harmlosen...

    OK, danke mal für den Tip
    dann werde ich mal umbauen und schauen obs dann geht



  • Jo ich habs gefunden,

    echt tricky und zwar war es tatsächlich ein strcpy, nämlich genau der dessen Textmüll immer angezeigt wurde.
    Ts, ts, ts sowas hab ich auch noch nicht gesehen.

    Vielen Dank noch mal an alle für die Tips



  • Wobei man auch bei strncpy aufpassen muss, da
    Zitat Borland Hilfe zu strncpy

    Wenn src mehr als maxlen Zeichen umfaßt, bleibt der nach dest kopierte String ohne abschließendes Nullzeichen.



  • Würde heißen, man sollte auf jeden Fall ein Zeichen aus dem String kappen falls der zu lang wäre.



  • oder '\0' an das letzte mögliche Zeichen zuweisen (in dest).



  • Der Text kommt aus einem Edit-Feld da stell ich MaxLength halt auf 34 bzw 54 dann sollte das passen



  • Mal 'ne ganz 'unschuldige' Frage: Warum verwendest Du überhaupt char? AnsiString ist doch bedeutend leichter zu handhaben.



  • reine Gewohnheit, hat keine besonderen Grund.



  • Würde ich mir abgewöhnen, siehst ja was dabei rauskommt. 😉 Und die Stringklassen sind wirklich sehr mächtig. Spart einem eine Menge Arbeit (und Probleme [..stichel..])

    Grüße



  • Ich hab mit dem BCB noch nie was gemacht. Unwissenheit kommt halt auch noch dazu 😃



  • hm, ohne das jetzt zu wissen, gibt's die Stringklassen nicht mittlerweile überall? Ich muss aber gestehen, am Anfang waren mir die Stringklassen überaus suspekt, insbesondere da es kontraproduktiv ist diese über new zu erstellen. Und alles ohne Pointer ist zu langsam... Dachte ich. 🙂

    Davon mal abgesehen welche BCB-Version verwendest Du. Alle Versionen, außer der Personal, sollten über den CodeGuard verfügen. Der meldet einem Zugriffe über Bereichsgrenzen hinaus. Sehr praktisch, um so hinterhältige Fehler zu finden.

    Grüße



  • Tja, ich hab zum testen nur die 5'er Standard hier, ich wills mir erst mal anschauen bevor ich einen Haufen Geld ausgebe.


Anmelden zum Antworten